#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1005;
#define LOCAL
int main() {
#ifdef LOCAL
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
#endif
/*
“?”先全部看成是“(”或“)”
l&r 都是未匹配的个数
然后l记录把?看成)后未配对的(的个数
然后r记录把?看成(后未配对的(的个数
*/
string s; cin >> s;
int len = s.size();
int ans = 0;
for(int i = 0; i < len; i++)
{
int l = 0, r = 0;
for(int j = i; j < len; j++)
{
if(s[j] == '(') l++, r++; // 未匹配++
if(s[j] == ')') l--, r--; // 未匹配--
if(s[j] == '?') l--, r++; // 看做)则l-- 看做(则r++
if(l < 0 && r > 0) l+=2;// if【把?当成)而导致l<0】 则将一个?从)变成(
if(r < 0) break; // 未匹配的)多出
if(l == 0) ans++; // 符合条件
}
}
cout << ans << endl;
}
// exemple ((????
Codeforces#459C 917A The Monster 左右括号匹配
最新推荐文章于 2022-07-13 02:01:45 发布