Submission #545215

#TimeUsernameProblemLanguageResultExecution timeMemory
545215socpiteIli (COI17_ili)C++17
0 / 100
1 ms340 KiB
#include<bits/stdc++.h> using namespace std; #define f first #define s second const int maxn = 1e4+5; pair<int, int> child[maxn][2]; int n, m; string str; bitset<maxn> subset[maxn][2]; bitset<maxn> val[2]; bitset<maxn> orval[2]; bitset<maxn> crr; bitset<maxn> nw; int ans[maxn]; int main(){ cin >> n >> m >> str; for(int i = 1; i <= m; i++){ char c; cin >> c; if(c == 'x')child[i][0].s = 0; else child[i][0].s = 1; cin >> c; child[i][0].f = c-'0'; cin >> c; if(c == 'x')child[i][1].s = 0; else child[i][1].s = 1; cin >> c; child[i][1].f = c-'0'; } crr.set(); for(int i = 1; i <= n; i++){ subset[i][0].set(); subset[i][0][i]=0; } for(int i = 1; i <= m; i++){ subset[i][1] = subset[child[i][1].f][child[i][1].s]&subset[child[i][0].f][child[i][0].s]; //for(int j = 1; j <= n; j++)cout << subset[i][1][j]; //cout << endl; if(str[i-1] == '0')crr&=subset[i][1]; } for(int i = 1; i <= n; i++){ orval[0][i]=crr[i]; } for(int i = 1; i <= m; i++){ orval[1][i] = orval[child[i][1].s][child[i][1].f]|orval[child[i][0].s][child[i][0].f]; } for(int i = 1; i <= m; i++){ if(str[i-1] =='?'){ if(orval[1][i]){ nw = crr&subset[i][1]; for(int j = 1; j <= n; j++){ val[0][j]=nw[j]; } bool gg = 0; for(int j = 1; j <= m; j++){ val[1][j] = val[child[j][1].s][child[j][1].f]|val[child[j][0].s][child[j][0].f]; if(str[j-1] != '?'){ //cout << val[1][j] << endl; if(int(val[1][j]) != str[j-1]-'0')gg=1; } } if(!gg)ans[i]=-1; else ans[i]=1; } else ans[i]=0; } else ans[i]=str[i-1]-'0'; //cout << ans[i] << endl; } for(int i = 1; i <= m; i++){ if(ans[i] == -1)cout << '?'; else cout << ans[i]; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...