solution.[构造括号序列] ## 构造括号序列 ## 题目描述 你需要构造一个长度大于等于 $a$ **并且** 小于等于 $b$ 的括号序列 $s$,使得 $s$ 中有 $c$ 对数对 $(i,j)$ 满足 $0\le i < j < |s|$ 且 $s_i$ 为左括号 `(`、$s_j$ 为右括号 `)`。 如果无解输出 `-1`。 ## 输入格式 输入第 $1$ 行 $1$ 个数 $T$,表示数据组数。 接下来 $T$ 行,每行 $3$ 个数 $a,b,c$。 ## 输出格式 输出共 $T$ 行,每行一个仅包含左括号 `(` 和右括号 `)` 的括号串 $s$。如果无解输出 `-1`。 ## 样例 ### 输入 ``` 2 1 115 3 3 4 7 ``` ### 输出 ``` ((() -1 ``` ## 数据范围 - Subtask 1:$a=1$,$1 \le b\le 10^5$,$\sum{b}\le 2\times 10^5$。 - Subtask 2:$1\le a\le b\le 10^9$,$\sum{a} \le 2\times 10^5$。 对于所有数据,满足: - $1\le a\le b\le 10^9$。 - $1\le T\le 100$。 - $1\le c\le 2^{50}$。 保证所有测试点均存在输出总长度不超过 $5 \times 10^7$ 个字符的正确答案。 - 时间限制:2s - 空间限制:512 MB - 是否有 Special Judge:是 ## 题解 考虑构造连续的 $x$ 个左括号和连续的 $y$ 个右括号,其中 $y=x$ 或 $y=x+1$。 不难发现只要交换一个左括号和一个右括号即可构造出 $c$ 对合法括号对,且这种构造方案下生成的 $c$ 是连续的。 贪心求出长度为 $b$ 时的合法括号对数量的最大值然后判一下无解即可。 如果 $a$ 太大就在末尾放连续的左括号,显然不产生任何贡献。