CF1685C Bring Balance
Bring Balance
题目描述
Alina 有一个长度为 (
和 )
组成。她想把这个括号序列变成一个平衡括号序列。
平衡括号序列定义为:能通过插入字符 +
和 1
使之成为合法数学表达式的序列。例如,序列 (())()
、()
和 (()(()))
是平衡的,而 )(
、(()
和 (()))(
就不是的。
在一次操作中,她可以反转
请求出最少几次操作可将
Solution
考虑将括号序列转化成为折线图,(
看作是 )
看作是
观察发现,最多只需要两次操作就可以使得原序列符合条件。一个点
那么只需要判断是否存在
时间复杂度
Code
// Cirno is not baka!
#include <bits/stdc++.h>
#define For(i, a, b) for (int i = (a); i <= (int)(b); ++i)
#define Rof(i, a, b) for (int i = (a); i >= (int)(b); --i)
#define FILE(filename) { \
freopen(#filename ".in", "r", stdin); \
freopen(#filename ".out", "w", stdout); \
}
#define All(x) x.begin(), x.end()
#define rAll(x) x.rbegin(), x.rend()
#define pii pair<int, int>
#define fi first
#define se second
#define i64 long long
#define mkp make_pair
// #define int long long
#define epb emplace_back
#define pb push_back
using namespace std;
const int _N = 2e5 + 5, mod = 1e9 + 7, inf = 1e9;
template<typename T> void Max(T &x, T y) {x = max(x, y);}
template<typename T> void Min(T &x, T y) {x = min(x, y);}
namespace BakaCirno {
int N;
int A[_N], B[_N];
bool Check0() {
return *min_element(A + 1, A + 2 * N + 1) >= 0;
}
bool Check1() {
int p1 = 2 * N + 1, p2 = 0;
For(i, 1, 2 * N) if (A[i] < 0)
Min(p1, i), Max(p2, i);
int l = max_element(A, A + p1 + 1) - A + 1;
int r = max_element(A + p2 + 1, A + 2 * N + 1) - A;
reverse(B + l, B + r + 1);
partial_sum(B + 1, B + 2 * N + 1, B + 1);
if (*min_element(B + 1, B + 2 * N + 1) >= 0) {
cout << 1 << '\n';
cout << l << ' ' << r << '\n';
return 1;
}
return 0;
}
void _() {
cin >> N;
For(i, 1, 2 * N) {
char c; cin >> c;
B[i] = (c == '(' ? 1 : -1);
A[i] = B[i] + A[i - 1];
}
if (Check0()) return cout << 0 << '\n', void();
if (Check1()) return ;
cout << 2 << '\n';
int p = max_element(A + 1, A + 2 * N + 1) - A;
cout << 1 << ' ' << p - 1 << '\n';
cout << p + 1 << ' ' << 2 * N << '\n';
}
}
signed main() {
// FILE(test);
cin.tie(0)->sync_with_stdio(0); int T = 1;
cin >> T;
while (T--) BakaCirno::_();
// fout.flush();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步