Submission #1105449

#TimeUsernameProblemLanguageResultExecution timeMemory
1105449epicci23Homework (CEOI22_homework)C++17
100 / 100
142 ms127424 KiB
#include "bits/stdc++.h"
//#define int long long
#define all(v) v.begin() , v.end()
#define sz(a) (int)a.size()
using namespace std;

const int N = 2e6 + 5;
int dp[N][2],val[N],kid[N][2],p=3;

void dfs(int c){
  if(val[c]==0){
    dp[c][0]=dp[c][1]=1;
    return;
  }
  int a=kid[c][0],b=kid[c][1];
  dfs(a),dfs(b);
  if(val[c]==1){ // min
    dp[c][0]=min(dp[a][0],dp[b][0]);
    dp[c][1]=dp[a][1]+dp[b][1];
  }
  else{ // max 
    dp[c][0]=dp[a][0]+dp[b][0];
    dp[c][1]=min(dp[a][1],dp[b][1]);
  }
}


void _(){
 string s;
 cin >> s;
 int n = sz(s);
 int M = count(all(s),'?');
 vector<int> ar;
 for(int i=0;i<n;){
   if(s[i]==','){
   	i++;
   	continue;
   }
   if(s[i]=='m'){
   	 if(s[i+1]=='a') ar.push_back(2);
   	 else ar.push_back(1);
   	 i+=4;
   	 continue;
   }
   if(s[i]==')'){
     ar.push_back(-1);
     i++;
     continue;
   }
   if(s[i]=='?'){
     ar.push_back(p++);
     i++;
     continue;
   }
   i++;
 }
 stack<int> st;
 for(int x:ar){
   st.push(x);
   if(st.top()==-1){
   	 st.pop();
   	 int a = st.top();
   	 st.pop();
   	 int b = st.top();
   	 st.pop();
   	 int c = p++;
     kid[c][0]=a;
     kid[c][1]=b;
     val[c]=st.top();
     st.pop();
     st.push(c);
   }
 }
 int rt = st.top();
 st.pop();
 dfs(rt);
 int r =  M - dp[rt][1] + 1;
 int l = dp[rt][0];
 cout << r-l+1 << '\n';
}

int32_t main(){
  cin.tie(0); ios::sync_with_stdio(0);
  int tc=1;//cin >> tc;
  while(tc--) _();
  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...