Submission #92618

#TimeUsernameProblemLanguageResultExecution timeMemory
92618turbatPaint By Numbers (IOI16_paint)C++14
0 / 100
66 ms82552 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; #define N 200005 int n, t, ok, now, cnt[N], l[105], r[105], dp[N][105]; string ans, st; vector <int> ve; void rec(int x, int idx){ if (dp[x][idx] != -1) return; if (!idx){ if (x + 1 >= ve[0] && !cnt[x - ve[0]] && (idx != t - 1 || !(cnt[n - 1] - cnt[x])) ) { dp[x][idx] = 1; r[idx] = max(r[idx], x); l[idx] = min(l[idx], x); } else dp[x][idx] = 0; return; } if (st[x - ve[idx]] != 'X') rec(x - ve[idx] - 1, idx - 1); else dp[x - ve[idx]][idx] = 0; if (x + 1 >= ve[idx] && dp[x - ve[idx]][idx - 1]&& !(cnt[x] - cnt[x - ve[idx]]) && (idx != t - 1 || !(cnt[n - 1] - cnt[x])) ){ if (st[x + 1] != 'X') dp[x + 1][idx] = 1; r[idx] = max(r[idx], x); l[idx] = min(l[idx], x); rec(x - 1, idx); } else dp[x][idx] = 0; } string solve_puzzle(string s, vector<int> c) { st = s; ve = c; n = s.size(); t = c.size(); for (int i = 0;i < t;i++) l[i] = n; now = 0; memset(dp, -1, sizeof dp); for (int i = 0;i < n;i++){ cnt[i] = cnt[i - 1] + s[i - 1] == '_'; ans += '?'; } for (int i = n - 1;i > 0;i--){ rec(i, t - 1); if (dp[i][i - 1]) break; } for (int i = 0;i <= l[0] - ve[0];i++) ans[i] = '_'; for (int i = r[t - 1] + 1; i < n;i++) ans[i] = '_'; for (int i = 0;i < t;i++){ if (i) for (int j = r[i - 1] + 1;j <= l[i] - ve[i];j++) ans[j] = '_'; for (int j = r[i] - ve[i] + 1;j <= l[i];j++) ans[j] = '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...