Submission #251483

#TimeUsernameProblemLanguageResultExecution timeMemory
251483VEGAnnIli (COI17_ili)C++14
100 / 100
637 ms2296 KiB
#include <bits/stdc++.h> #define PB push_back using namespace std; const int N = 20100; vector<int> bck[N], to[N]; int n, m; string s, t; bool was[N]; void down(int v){ s[v] = '0'; for (int u : bck[v]) down(u); } bool noone(int v){ if (v >= m) return (s[v] - '0'); int res = 0; for (int u : bck[v]) res |= noone(u); return res; } void mark_all(int v){ if (v >= m) t[v] = '0'; for (int u : bck[v]) mark_all(u); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); #ifdef _LOCAL freopen("in.txt","r",stdin); #endif // _LOCAL cin >> n >> m >> s; for (int i = 0; i < m; i++){ char t1, t2; int n1, n2; cin >> t1 >> n1 >> t2 >> n2; n1--; n2--; int fi = n1, se = n2; if (t1 == 'x') fi += m; if (t2 == 'x') se += m; bck[i].PB(fi); bck[i].PB(se); to[fi].PB(i); to[se].PB(i); } for (int i = 0; i < n; i++) s += "1"; for (int i = 0; i < m; i++) if (s[i] == '0') down(i); for (int i = 0; i < m; i++){ if (s[i] != '?') continue; if (!noone(i)) s[i] = '0'; else { t = s; mark_all(i); bool bad = 0; for (int i = 0; i < m; i++){ was[i] = 0; for (int u : bck[i]) if (u < m) was[i] |= was[u]; else was[i] |= (t[u] - '0'); if (s[i] == '1' && !was[i]){ bad = 1; break; } } if (bad) s[i] = '1'; } } for (int i = 0; i < m; i++) cout << s[i]; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...