Submission #824803

#TimeUsernameProblemLanguageResultExecution timeMemory
824803vnm06Paint By Numbers (IOI16_paint)C++14
100 / 100
487 ms44116 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; int n, k; int brw[200005]; bool pos_le[200005][105]; bool pos_ri[200005][105]; int posB[200005]; bool posW[200005]; std::string solve_puzzle(std::string s, std::vector<int> c) { s='_'+s+'_'; n=s.size(); for(int i=0; i<n; i++) { if(i) brw[i]=brw[i-1]; if(s[i]=='_') brw[i]++; } k=c.size(); for(int j=0; j<=n; j++) { if(s[j]=='X') break; pos_le[j][k]=1; } pos_ri[n][k]=1; for(int j=n-1; j>=0; j--) { if(s[j]=='X') break; pos_ri[j][k]=1; } for(int i=0; i<k; i++) { for(int j=1; j+c[i]<n; j++) { if(i && !pos_le[j-1][i-1]) continue; if(!i && !pos_le[j-1][k]) continue; if(brw[j+c[i]-1]-brw[j-1]) continue; if(s[j+c[i]]=='X') continue; pos_le[j+c[i]][i]=1; for(int t=j+c[i]+1; t<n && s[t]!='X'; t++, j++) pos_le[t][i]=1; } } for(int i=k-1; i>=0; i--) { for(int j=n-c[i]-1; j>=1; j--) { if(!pos_ri[j+c[i]][i+1]) continue; if(brw[j+c[i]-1]-brw[j-1]) continue; if(s[j-1]=='X') continue; pos_ri[j-1][i]=1; for(int t=j-2; t>=0 && s[t]!='X'; t--, j--) pos_ri[t][i]=1; } } for(int i=0; i<k; i++) { for(int j=1; j+c[i]<n; j++) { if(brw[j+c[i]-1]-brw[j-1]) continue; if(i==0 && !pos_le[j-1][k]) continue; if(i && !pos_le[j-1][i-1]) continue; if(!pos_ri[j+c[i]][i+1]) continue; posB[j]++; posB[j+c[i]]--; } } for(int j=1; j<=n; j++) { for(int i=0; i<=k; i++) { if(i && pos_le[j][i-1] && pos_ri[j][i]) posW[j]=1; if(!i && pos_le[j][k] && pos_ri[j][i]) posW[j]=1; } } for(int j=1; j<=n; j++) { posB[j]+=posB[j-1]; if(posB[j] && posW[j]) s[j]='?'; else if(posB[j]) s[j]='X'; else if(posW[j]) s[j]='_'; } return s.substr(1, n-2); }
#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...