Submission #581564

#TimeUsernameProblemLanguageResultExecution timeMemory
581564SlavicGPaint By Numbers (IOI16_paint)C++17
80 / 100
2065 ms832 KiB
#include "paint.h" #include "bits/stdc++.h" #define sz(a) (int)a.size() #define pb push_back #define all(a) a.begin(),a.end() using ll = long long; using namespace std; int query(int l, int r, vector<int>& p) { assert(l >= 0 && r >= 0 && l < sz(p) && r < sz(p)); assert(l <= r); return p[r] - (l ? p[l - 1]: 0); } bool calc(string s, vector<int> c) { int n = sz(s), k = sz(c); vector<vector<int>> dp(n + 1, vector<int>(k + 1, 0)); vector<int> black(n + 1, 0), white(n + 1, 0); dp[0][0] = 1; for(int i = 0; i < n; ++i) { black[i + 1] = black[i] + (s[i] == 'X'); white[i + 1] = white[i] + (s[i] == '_'); if(!black[i + 1]) dp[i + 1][0] = 1; } for(int i = 1; i <= n; ++i) { for(int j = 1; j <= k; ++j) { if(s[i - 1] == 'X' || s[i - 1] == '.') { int p = i - c[j - 1]; if(p - (j != 1) < 0 || query(p + 1, i, white) || query(p, p, black)) { //Purice Chad } else dp[i][j] |= dp[p - (j != 1)][j - 1]; } if(s[i - 1] == '_' || s[i - 1] == '.') { dp[i][j] |= dp[i - 1][j]; } } } return dp[n][k]; } string solve_puzzle(string s, vector<int> c) { string ans = ""; int n = sz(s); for(int i = 0; i < n; ++i) { if(s[i] == 'X') { ans += 'X'; } else if(s[i] == '_') { ans += '_'; } else { s[i] = 'X'; bool ok1 = calc(s, c); s[i] = '_'; bool ok2 = calc(s, c); assert(ok1 || ok2); if(ok1 && ok2) { ans += '?'; } else if(ok1) { ans += 'X'; } else { ans += '_'; } s[i] = '.'; } } return ans; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...