Submission #725946

#TimeUsernameProblemLanguageResultExecution timeMemory
725946amunduzbaevHomework (CEOI22_homework)C++17
100 / 100
148 ms147316 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...