Submission #598919

#TimeUsernameProblemLanguageResultExecution timeMemory
598919cheissmartPaint By Numbers (IOI16_paint)C++14
100 / 100
314 ms85640 KiB
#include "paint.h" #include <bits/stdc++.h> #define F first #define S second #define V vector #define PB push_back #define EB emplace_back #define MP make_pair #define SZ(v) int((v).size()) #define ALL(v) (v).begin(), (v).end() using namespace std; typedef long long ll; typedef pair<int, int> pi; typedef V<int> vi; const int INF = 1e9 + 7, N = 2e5 + 5, K = 105; bool dpl[N][K][2]; bool dpr[N][K][2]; int l[N], r[N]; string solve_puzzle(string s, vi c) { int n = SZ(s), k = SZ(c); dpl[0][0][0] = 1; for(int i = 1; i <= n; i++) { if(s[i - 1] == '_') l[i] = 0; else l[i] = l[i - 1] + 1; for(int j = 0; j <= k; j++) { // 0 if(s[i - 1] != 'X') dpl[i][j][0] |= dpl[i - 1][j][0] | dpl[i - 1][j][1]; // 1 if(s[i - 1] != '_' && j && c[j - 1] <= l[i]) dpl[i][j][1] |= dpl[i - c[j - 1]][j - 1][0]; } } dpr[n + 1][0][0] = 1; for(int i = n; i >= 1; i--) { if(s[i - 1] == '_') r[i] = 0; else r[i] = r[i + 1] + 1; for(int j = 0; j <= k; j++) { // 0 if(s[i - 1] != 'X') dpr[i][j][0] |= dpr[i + 1][j][0] | dpr[i + 1][j][1]; // 1 if(s[i - 1] != '_' && j && c[k - j] <= r[i]) dpr[i][j][1] |= dpr[i + c[k - j]][j - 1][0]; } } string ans(n, '@'); for(int i = 1; i <= n; i++) for(int j = 0; j <= k; j++) if(dpl[i][j][0] && dpr[i][k - j][0]) ans[i - 1] = '_'; vi p(n + 1); for(int i = 1; i <= n; i++) { for(int j = 1; j <= k; j++) { if(dpl[i][j][1] && dpr[i + 1][k - j][0]) { int lb = i - c[j - 1] + 1, rb = i; p[lb - 1]++; p[rb]--; } } } for(int i = 0; i < n; i++) { if(i) p[i] += p[i - 1]; if(p[i]) { if(ans[i] == '_') ans[i] = '?'; else ans[i] = 'X'; } } 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...