题解:AT_arc175_b [ARC175B] Parenthesis Arrangement
Parenthesis Arrangement
解题思路
先用一个字符串顺序存下不符合题目要求的括号,然后分别记录下其中左括号和有括号的数量。如果交换括号对的代价小于改变一对括号的代价,即
AC Code
#include <bits/stdc++.h>
using namespace std;
long long N, A, B;
string S;
long long Answer;
signed main() {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0), cin >> N >> A >> B >> S;
string s;
for (int i = 0, count_left = 0; i < S.size(); i++) {
if (S[i] == '(') count_left++, s.push_back('(');
if (S[i] == ')') if (count_left >= 1) count_left--, s.pop_back();
else s.push_back(')');
}
long long left_count = 0, right_count = 0;
for (int i = 0; i < s.size(); i++) if (s[i] == '(') left_count++;
else if (s[i] == ')') right_count++;
if (left_count && right_count && A < B * 2) {
int _min = min(left_count, right_count);
Answer += _min / 2 * A;
if (_min % 2 == 1) Answer += A;
left_count -= _min, right_count -= _min;
}
if (left_count) Answer += left_count / 2 * B;
if (right_count) Answer += right_count / 2 * B;
if (left_count & 1) Answer += 2 * B;
cout << Answer << endl;
return 0;
}