Submission #204497

#TimeUsernameProblemLanguageResultExecution timeMemory
204497anonymousPaint By Numbers (IOI16_paint)C++14
90 / 100
23 ms18680 KiB
#include "paint.h" #include <iostream> #include<string> #include<vector> #define MAXN 100005 #define MAXK 105 using namespace std; int N, K; bool dp[MAXN][MAXK], done[MAXN][MAXK], canwhite[MAXN], canblack[MAXN]; string s; vector <int> c; bool gen(int i, int j) { if (i >= N && j == K) {return(1);} if (i >= N && j < K) {return(0);} if (done[i][j]) {return(dp[i][j]);} done[i][j]=true; if (s[i] != 'X' && gen(i+1,j)) { dp[i][j]=true; canwhite[i]=true; } if (j < K && i + c[j] <= N) { bool can = true; for (int k=i; k<i+c[j]; k++) { if (s[k] == '_') { can=false; break; } } if (i+c[j] != N && s[i+c[j]] == 'X') { can=false; } if (can && gen(i+c[j]+1, j+1)) { dp[i][j]=true; for (int k=i; k<i+c[j]; k++) { canblack[k]=true; } canwhite[i+c[j]]=true; } } return(dp[i][j]); } string solve_puzzle(string S, vector<int> C) { N=S.size(), K=C.size(); s = S, c = C; gen(0,0); string Sol; for (int i=0; i<N; i++) { if (canblack[i] && canwhite[i]) { Sol.push_back('?'); } else if (canblack[i]) { Sol.push_back('X'); } else { Sol.push_back('_'); } } return(Sol); }
#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...