Submission #545777

#TimeUsernameProblemLanguageResultExecution timeMemory
545777baojiaopisuIli (COI17_ili)C++14
0 / 100
3 ms596 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; using ull = unsigned long long; using pii = pair<int, int>; using pll = pair<ll, ll>; using pld = pair<ld, ld>; #define fi first #define se second #define pb push_back #define pf push_front #define mp make_pair #define ins insert #define btpc __builtin_popcount #define btclz __builtin_clz #define sz(x) (int)(x.size()); #define all(x) x.begin(), x.end() #define debug(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] " mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int d4x[4] = {1, 0, -1, 0}; int d4y[4] = {0, 1, 0, -1}; int d8x[8] = {0, 1, 1, 1, 0, -1, -1, -1}; int d8y[8] = {1, 1, 0, -1, -1, -1, 0, 1}; template<class X, class Y> bool minimize(X &x, const Y &y) { if (x > y) { x = y; return true; } return false; } template<class X, class Y> bool maximize(X &x, const Y &y) { if (x < y) { x = y; return true; } return false; } const int MOD = 1e9 + 7; //998244353 template<class X, class Y> void add(X &x, const Y &y) { x = (x + y); if(x >= MOD) x -= MOD; } template<class X, class Y> void sub(X &x, const Y &y) { x = (x - y); if(x < 0) x += MOD; } /* Author : Le Ngoc Bao Anh, 11A5, LQD High School for Gifted Student*/ const ll INF = 1e9; const int N = 3e5 + 10; int par[N][2]; int cnt[N], res[N], ans[N]; void solve() { int n, m; cin >> n >> m; string s; cin >> s; s = "#" + s; for(int i = 1; i <= n + m; i++) ans[i] = -1; for(int i = 1; i <= m; i++) { if(s[i] == '0') ans[i + n] = 0; if(s[i] == '1') ans[i + n] = 1; } for(int i = 1; i <= m; i++) { string a, b; cin >> a >> b; int u = a[1] - '0'; if(a[0] == 'c') u += n; par[i + n][0] = u; u = b[1] - '0'; if(a[0] == 'c') u += n; par[i + n][1] = u; } for(int i = m + n; i > n; i--) { if(ans[i] == 0) ans[par[i][0]] = ans[par[i][1]] = 0; } for(int i = 1; i <= n; i++) cnt[i] = (ans[i] == 0 ? 0 : 1); for(int i = n + 1; i <= n + m; i++) { cnt[i] = cnt[par[i][0]] + cnt[par[i][1]]; if(cnt[i] == 0) ans[i] = 0; } for(int i = n + 1; i <= n + m; i++) { if(ans[i] != -1) continue; for(int j = 1; j <= n + m; j++) res[j] = ans[j]; res[i] = 0; for(int j = n + m; j > n; j--) { if(res[j] == 0) res[par[j][0]] = res[par[j][1]] = 0; } for(int j = 1; j <= n; j++) cnt[j] = (res[j] == 0 ? 0 : 1); for(int j = n + 1; j <= n + m; j++) { cnt[j] = cnt[par[j][0]] + cnt[par[j][1]]; if(cnt[j] == 0 && res[j] == 1) ans[i] = 1; } } for(int i = n + 1; i <= n + m; i++) { if(ans[i] == -1) cout << '?'; else cout << ans[i]; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #else //online #endif int tc = 1, ddd = 0; // cin >> tc; while(tc--) { //ddd++; //cout << "Case #" << ddd << ": "; solve(); } }

Compilation message (stderr)

ili.cpp: In function 'int main()':
ili.cpp:137:17: warning: unused variable 'ddd' [-Wunused-variable]
  137 |     int tc = 1, ddd = 0;
      |                 ^~~
ili.cpp:131:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  131 |     freopen("input.txt", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
ili.cpp:132:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  132 |     freopen("output.txt", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...