Submission #581213

#TimeUsernameProblemLanguageResultExecution timeMemory
581213SlavicGPaint By Numbers (IOI16_paint)C++17
80 / 100
214 ms524288 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; bool ok(string s, vector<int> c) { s += '_'; int n = s.size(), k = c.size(); vector<vector<vector<int>>> dp(n + 1, vector<vector<int>>(k + 1, vector<int>(n + 1, 0))); dp[0][0][0] = 1; c.pb(0); for(int i = 1; i <= n; ++i) { for(int j = 0; j <= k; ++j) { for(int cur = 0; cur <= c[j]; ++cur) { char x = s[i - 1]; if(x == 'X' || x == '.') { if(cur >= 1) { dp[i][j][cur] |= dp[i - 1][j][cur - 1]; } } if(x == '_' || x == '.') { if(cur == 0) { if(j) dp[i][j][cur] |= dp[i - 1][j - 1][c[j - 1]]; dp[i][j][cur] |= dp[i - 1][j][cur]; } } } } } return dp[n][k][0]; } 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 = ok(s, c); s[i] = '_'; bool ok2 = ok(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...