B 括號(構造)

2021-10-19 04:40:27 字數 1904 閱讀 8786

傳送門

題目大意

構造乙個非空的括號字串,包含正好 k,k

≤1e9

k, k \leq 1e9

k,k≤1e

9 個不同合法括號對。所謂括號字串,是指由』(

((『和』)

))'這兩種字元構成的字串。要求構造的字串長度不超過100000。

解題思路

這題折磨了好久,一開始想的方法是將乙個數分解為兩個因子相乘,但是顯然最壞的結果是2乘上乙個大質數,那麼肯定翻車。然後想到先找k

\sqrt

k​,令k =k

∗k+r

es

k = \sqrt*\sqrt + res

k=k​∗k

​+re

s,然後分解res

resre

s湊出結果,可是考慮一些極端的情況還是會爆長度。

實際上在考慮到對k

kk開根號時就想偏了,只需要看需要多少個k

\sqrt

k​,然後將所有餘數和最後乙個右括號湊一起。這樣最壞的情況是3∗1

e9=9

e4

3*\sqrt = 9e4

3∗1e9​

=9e4

,剛好可以。

ps:注意特判k=0

k=0k=

0的情況。

//

//#include .h>

#include

using namespace std;

#define endl "\n"

#define lowbit

(x)(x &

(-x)

)typedef long

long ll;

typedef long

double ld;

typedef unsigned long

long ull;

typedef pair<

int,

int>

pii;

typedef pair

pll;

typedef pair<

double

,double

>

pdd;

const

double eps =

1e-8

;const

double pi =

acos(-

1.0)

;const

int inf =

0x3f3f3f3f

;const

double dinf =

1e300

;const ll inf =

1e18

;const

int mod =

1e9+7;

const

int maxn =

2e5+10;

string ans;

intmain()

ans ="";

int x =

sqrt

(k);

int y = k / x, z = k % x;

for(

int i =

1; i <= y; i++

) ans +=

'(';

for(

int i =

1; i < x; i++

) ans +=

')';

for(

int i =

1; i <= z; i++

) ans +=

'(';

ans +=

')';

cout << ans << endl;

return0;

}

建構函式加括號與不加括號的區別

首先定義乙個建構函式hello function hello alert 1 定義乙個函式表示式 var getname function alert 2 例項化物件,下面這兩個如果建構函式沒有形參的話,例項化的時候建構函式可以不加括號 推薦加上 var p new hello var p1 new...

Codeforces482B 線段樹構造

題意 有m個限制,每個限制有l,r,q,表示從a l a r 取且後的數一定為q,問是否有滿足的數列。思路 看到大牛說是線段樹,線段樹對於區間操作,印象中乘啊,啊,啊都不錯,但是並沒有就是對於這個位運算就不懂了 這題的題意就是構造,大致思路是 每條限制是對於每個區間處理就是或上q 可以保證相應的二進...

Codeforces482B 線段樹構造

題意 有m個限制,每個限制有l,r,q,表示從a l a r 取且後的數一定為q,問是否有滿足的數列。思路 看到大牛說是線段樹,線段樹對於區間操作,印象中乘啊,啊,啊都不錯,但是並沒有就是對於這個位運算就不懂了 這題的題意就是構造,大致思路是 每條限制是對於每個區間處理就是或上q 可以保證相應的二進...