2021牛客寒假演算法基礎集訓營1 B 括號 構造

2021-10-18 19:23:28 字數 1356 閱讀 3284

請你構造乙個非空的括號字串,包含正好 k 個不同合法括號對。所謂括號字串,是指由』(『和』)'這兩種字元構成的字串。要求構造的字串長度不超過100000。

乙個整數 k。

0 ≤ k ≤ 10^9

乙個僅包含左右括號字串,其中有 k 個合法的括號對。如果有多種構造方法,輸出任意一種合法方案即可。

輸入

3輸出

()()

說明

假設字串陣列下標從 1 開始,則 (1,2), (1,4), (3,4) 共計 3 個合法括號對。當然,"()))" 也是一種合法的構造。

輸入

4輸出

(())

說明

假設字串陣列下標從 1 開始,則 (1,3), (1,4), (2,3), (2,4) 共計 4 個合法括號對。另外,合法的構造還有"())()"、"()(()(" 等等。

輸入

9輸出

()))))))))

說明

合法的還可以是:

())())()

((()))

)()()())(

等等等。有非常多種合法構造,輸出任意即可。

構造

當k = 2 時,()) / (()

當k = 3 時,())) / ((() / ()()

每個左括號右邊有多少個右括號,加起來要為k。可以先畫一堆右括號,之後再在合適的位置新增左括號,要注意構造的串的長度不能超過100000,k ≤ 10^9。

接下來可以考慮先畫50000個右括號(在左邊填左括號)計算左括號位置,放a個在最左邊:a = k / 50000 。零頭部分用乙個括號即可,位置在右數第k % 50000個右括號的左邊放乙個左括號。

若想使左右括號的個數盡量均勻,可以先畫 l√a」( lx」表示向下取整 )個右括號, k / l√a」個左括號在最左邊,再用乙個零頭部分湊上,即右數第 k % ( k / l√a」) 個右括號的左邊放乙個左括號。

c++

#include

#include

#include

using

namespace std;

intmain()

return0;

}

2021牛客寒假演算法基礎集訓營3

三場牛客下來覺得自己越來越不在狀態,思路不清晰,一下手就是bug,每調完一題刷下榜都被甩開十里地,罰時慘不忍睹 傳送門 簽到 include using namespace std typedef long long ll const ll inf 0x3f3f3f3f const ll mod 1...

2021牛客寒假演算法基礎集訓營1

題目描述 請你構造乙個非空的括號字串,包含正好 k 個不同合法括號對。所謂括號字串,是指由 和 這兩種字元構成的字串。要求構造的字串長度不超過100000。輸入描述 乙個整數 k。乙個整數 kk。0 k 1e9 輸出描述 乙個僅包含左右括號字串,其中有 kk 個合法的括號對。如果有多種構造方法,輸出...

2021牛客寒假演算法基礎集訓營6

思路 k1排k2前面滿足 k1.a k2.ax k2.b k1.b k1.ax k1.b k2.b k2.ak1.b k2.b k1.a k2.a k1.b include define ull unsigned long long define ll long long const int inf...