이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "bits/stdc++.h"
using namespace std;
#define ar array
typedef long long ll;
#define int ll
signed main(){
ios::sync_with_stdio(0); cin.tie(0);
string s; cin >> s;
int n = 0;
vector<int> ss, t, par;
for(int i=0;i<(int)s.size();i++){
if(s[i] == '?'){
n++;
}
if(s[i] == '('){
t.push_back(s[i-1] == 'x');
ss.push_back(par.size());
par.push_back(0);
}
if(s[i] == ')'){
par[ss.back()] = par.size();
ss.pop_back();
}
}
int sz = par.size();
par.push_back(sz);
function<ar<int, 2>(int, int)> get = [&](int l, int r) -> ar<int, 2>{
if(l >= r){
return {1, 1};
}
if(l + 1 == r){
return (ar<int, 2>){1 + t[l], 1 + (!t[l])};
}
int mn = 0, mx = 0;
ar<int, 2> L = get(l + 1, par[l + 1]), R = get(par[l + 1], r);
if(t[l]){
mx = min(L[1], R[1]);
mn = L[0] + R[0];
} else {
mx = L[1] + R[1];
mn = min(L[0], R[0]);
}
//~ cout<<l<<" "<<r<<" "<<mn<<" "<<mx<<endl;
return (ar<int, 2>){mn, mx};
};
ar<int, 2> res = get(0, sz);
int l = res[0], r = n - res[1] + 1;
cout<<r - l + 1<<"\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |