Submission #878390

#TimeUsernameProblemLanguageResultExecution timeMemory
878390HuyQuang_re_ZeroPaint By Numbers (IOI16_paint)C++14
100 / 100
265 ms125368 KiB
#include <bits/stdc++.h> #define ll long long #define db long double #define II pair <ll,ll> #define III pair <ll,II> #define IV pair <vector <int>,vector <int> > #define TII pair <treap*,treap*> #define fst first #define snd second #define BIT(x,i) ((x>>i)&1) #define pi acos(-1) #define to_radian(x) (x*pi/180.0) #define to_degree(x) (x*180.0/pi) #define Log(x) (31-__builtin_clz((int)x)) #define LogLL(x) (63-__builtin_clzll((ll)x)) #include "paint.h" using namespace std; bool l[200005][105],r[200005][105]; int sum_end[200005][105],n,m,i,j,len[105]; string solve_puzzle(string s,vector <int> c) { n=s.size(); s=" "+s; for(int x:c) len[++m]=x; int last=n+1; r[n+1][m+1]=1; for(i=n;i>=1;i--) { if(s[i]=='_') last=i; for(j=m+1;j>=1;j--) { if(s[i]!='X') r[i][j]=r[i+1][j]; if(last-i>=len[j] && j<=m) { int ok=(i+len[j]+1<n+2 ? (r[i+len[j]+1][j+1] && s[i+len[j]]!='X') : r[i+len[j]][j+1]); // if(i==4 && j==1) cerr<<i+len[j]+1<<'\n'; r[i][j]|=ok; } } } last=0; l[0][0]=1; for(i=1;i<=n;i++) { if(s[i]=='_') last=i; for(j=0;j<=m;j++) { if(s[i]!='X') l[i][j]=l[i-1][j]; if(i-last>=len[j] && j>0) { int ok=(i-len[j]-1>=0 ? (l[i-len[j]-1][j-1] && s[i-len[j]]!='X') : l[i-len[j]][j-1]); l[i][j]|=ok; sum_end[i][j]=(ok && (i==n ? r[i+1][j+1] : (s[i+1]!='X' && r[i+2][j+1]))); } sum_end[i][j]+=sum_end[i-1][j]; } } // cerr<<sum_end[n][2]-sum_end[n-1][2]; string res=""; for(i=1;i<=n;i++) { int okw=0,okb=0; if(s[i]!='X') for(j=0;j<=m;j++) { okw|=(l[i-1][j] && r[i+1][j+1]); // if(i==3 && okw) cerr<<j<<'\n'; } if(s[i]!='_') for(j=1;j<=m;j++) okb|=(sum_end[min(n,i+len[j]-1)][j]-sum_end[i-1][j]>0); if(okw && okb) res+="?"; else if(okw) res+='_'; else res+='X'; } return res; } /* int main() { freopen("paint.inp","r",stdin); freopen("paint.out","w",stdout); string s; cin>>s; vector <int> c; int x; while(cin>>x) c.push_back(x); cout<<solve_puzzle(s,c); } */
#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...