Submission #590820

#TimeUsernameProblemLanguageResultExecution timeMemory
590820Sam_a17Paint By Numbers (IOI16_paint)C++14
100 / 100
993 ms359388 KiB
#define _CRT_SECURE_NO_WARNINGS #include <bits/stdc++.h> #include <cstdio> using namespace std; #define ll long long #define ld long double #define all(x) (x.begin(), x.end()) #define rall(x) (x.rbegin(), x.rend()) #define sz(x) (int)x.size() const int N = 2e5 + 10, K = 1e2 + 10; int dp[N][K][2], C[N], n, k; int dp2[N][K][2], p[N]; string curr; // 1 is if true // -1 is if undef // 0 if false int rec(int st, int ki, int flag) { if(st == n && ki == k) { return 1; } else if(st == n) { dp[st][ki][flag] = 0; return 0; } if(dp[st][ki][flag] != -1) { return dp[st][ki][flag]; } int answ = 0; if(ki != k) { int lst = st, lstX = -1; if(curr[st + 1] != 'X') { int cur = rec(st + 1, ki, 0); if(cur) { dp2[st + 1][ki][0]++; } answ |= cur; } int i = st + C[ki + 1]; if(i <= n && !flag && !(p[i] - p[st])) { int curr = rec(i, ki + 1, 1); if(curr) { int prefStart = i - C[ki + 1] + 1, prefEnd = i + 1; dp2[prefStart][ki + 1][1]++; dp2[prefEnd][ki + 1][1]--; } answ |= curr; } } else { if(curr[st + 1] == 'X') { dp[st][ki][flag] = 0; return dp[st][ki][flag]; } int cur = rec(st + 1, ki, 0); if(cur) { dp2[st + 1][ki][0]++; } answ |= cur; } dp[st][ki][flag] = answ; return dp[st][ki][flag]; } string solve_puzzle(string s, vector<int> c) { memset(dp, -1, sizeof(dp)); n = sz(s); curr += "."; for(int i = 0; i < n; i++) { curr += s[i]; p[i + 1] = p[i]; if(s[i] == '_') { p[i + 1]++; } } k = sz(c); for(int i = 0; i < k; i++) { C[i + 1] = c[i]; } rec(0, 0, 0); string answ = ""; for(int i = 1; i <= n; i++) { int cnt1 = 0, cnt2 = 0; for(int j = 0; j <= k; j++) { dp2[i][j][1] += dp2[i - 1][j][1]; } for(int j = 0; j <= k; j++) { if(dp2[i][j][0]) { cnt1++; } if(dp2[i][j][1]) { cnt2++; } if(cnt1 && cnt2) { break; } } if(cnt1 && !cnt2) { answ += "_"; } else if(!cnt1 && cnt2) { answ += "X"; } else { answ += "?"; } } return answ; }

Compilation message (stderr)

paint.cpp: In function 'int rec(int, int, int)':
paint.cpp:36:9: warning: unused variable 'lst' [-Wunused-variable]
   36 |     int lst = st, lstX = -1;
      |         ^~~
paint.cpp:36:19: warning: unused variable 'lstX' [-Wunused-variable]
   36 |     int lst = st, lstX = -1;
      |                   ^~~~
#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...