Submission #170284

#TimeUsernameProblemLanguageResultExecution timeMemory
170284arnold518Paint By Numbers (IOI16_paint)C++14
100 / 100
1119 ms59692 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 2e5; const int MAXK = 100; int N, K; string S, ans; vector<int> C; int cnt[MAXN+10]; bool dp[MAXN+10][MAXK+10], vis[MAXN+10][MAXK+10]; int black[MAXN+10], white[MAXN+10]; bool solve(int n, int k) { int i, j; if(n>N && k>K) return true; if(n>N) return false; bool &ret=dp[n][k]; if(vis[n][k]) return ret; ret=false; vis[n][k]=true; if(S[n]!='X' && solve(n+1, k)) { ret=true; white[n]++; white[n+1]--; //printf("PASS %d %d\n", n, k); } if(n+C[k]<=N+1 && k<=K) { if(cnt[n+C[k]-1]-cnt[n-1]==0 && S[n+C[k]]!='X' && solve(n+C[k]+1, k+1)) { ret=true; black[n]++; black[n+C[k]]--; white[n+C[k]]++; white[n+C[k]+1]--; //printf("FILL %d %d\n", n, k); } } //printf("%d %d : %d\n", n, k, ret); return ret; } string solve_puzzle(string _S, vector<int> _C) { int i, j; S=_S; C=_C; N=S.size(); K=C.size(); S="@"+S+"@"; C.insert(C.begin(), -1); for(i=1; i<=N; i++) cnt[i]=cnt[i-1]+(S[i]=='_'); solve(1, 1); for(i=1; i<=N; i++) black[i]+=black[i-1]; for(i=1; i<=N; i++) white[i]+=white[i-1]; ans.resize(N); for(i=1; i<=N; i++) { if(black[i] && white[i]) ans[i-1]='?'; else if(black[i]) ans[i-1]='X'; else if(white[i]) ans[i-1]='_'; } return ans; }

Compilation message (stderr)

paint.cpp: In function 'bool solve(int, int)':
paint.cpp:22:9: warning: unused variable 'i' [-Wunused-variable]
     int i, j;
         ^
paint.cpp:22:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j;
            ^
paint.cpp: In function 'std::__cxx11::string solve_puzzle(std::__cxx11::string, std::vector<int>)':
paint.cpp:58:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j;
            ^
#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...