Submission #955146

#TimeUsernameProblemLanguageResultExecution timeMemory
955146PoPularPlusPlusHomework (CEOI22_homework)C++17
100 / 100
211 ms183824 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb(x) push_back(x)
#define mp(x,y) make_pair(x,y)
#define all(x) x.begin(),x.end()
#define vf first 
#define vs second
const int mod = 1000000007;

mt19937_64 RNG(chrono::steady_clock::now().time_since_epoch().count());

const int N = 2000009;

vector<pair<int,int>> adj[N];
int dp[N][2], siz[N];

void dfs(int node){
	if(adj[node].size() == 0){
		siz[node] = 1;
		dp[node][0] = dp[node][1] = 1;
		return;
	}
	siz[node] = 0;
	for(auto i : adj[node]){
		dfs(i.vf);
		siz[node] += siz[i.vf];
	}
	int u = adj[node][0].vf , v = adj[node][1].vf;
	if(adj[node][0].vs == 0){
		dp[node][0] = min(dp[u][0] , dp[v][0]);
		dp[node][1] = dp[v][1] + dp[u][1] - 1;
	}
	else {
		dp[node][0] = dp[u][0] + dp[v][0];
		dp[node][1] = max(siz[u] + dp[v][1] , siz[v] + dp[u][1]);
	}
}

void solve(){
	string s;
	cin >> s;
	int n = 0;
	int siz = s.size();
	for(int i = 0; i < siz; i++){
		if(s[i] == '?')
			n++;
	}
	stack<pair<int,int>> st;
	int cur = n;
	int cnt = 0;
	for(int i = 0; i < siz; i++){
		if(s[i] == 'm'){
			if(st.size()){
				int u = st.top().vf , w = st.top().vs, v = cur;
				st.pop();
				adj[u].pb(mp(v,w));
			}
			int w = 1;
			if(s[i + 1] == 'i')
				w = 0;
			st.push(mp(cur,w));
			st.push(mp(cur++,w));
		}
		else if(s[i] == '?'){
			int u = st.top().vf , w = st.top().vs, v = cnt++;
			st.pop();
			adj[u].pb(mp(v,w));
		}
	}
	dfs(n);
	cout << (dp[n][1] - dp[n][0]) + 1 << '\n';
}

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	//int t;cin>>t;
	//while(t--) 
	solve();
	return 0;
}
#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...