Submission #711352

#TimeUsernameProblemLanguageResultExecution timeMemory
711352bin9638Paint By Numbers (IOI16_paint)C++17
100 / 100
449 ms332620 KiB
#include <bits/stdc++.h> #ifndef SKY #include "paint.h" #endif // SKY #include <cstdlib> using namespace std; #define ll long long #define pb push_back #define N 200010 #define ii pair<int,int> #define fs first #define sc seoncd int l[N][105][2],r[N][105][2],k,n,white[N],black[N],sum[N],cnt[N],c[N]; string solve_puzzle(string s,vector<int> vec) { n=s.size(); s=" "+s; k=vec.size(); for(int i=1;i<=k;i++) c[i]=vec[i-1]; for(int i=1;i<=n;i++) sum[i]=sum[i-1]+(s[i]!='_'); l[0][0][1]=r[n+1][k+1][1]=1; for(int i=1;i<=n;i++) { //black if(s[i]!='_') { for(int j=1;j<=k;j++) if(i>=c[j]&&sum[i]-sum[i-c[j]]==c[j]) l[i][j][0]|=l[i-c[j]][j-1][1]; } //while if(s[i]!='X') { for(int j=0;j<=k;j++) l[i][j][1]|=(l[i-1][j][1]|l[i-1][j][0]); } } for(int i=n;i>=1;i--) { //black if(s[i]!='_') { for(int j=1;j<=k;j++) if(n-i+1>=c[j]&&sum[i+c[j]-1]-sum[i-1]==c[j]) r[i][j][0]|=r[i+c[j]][j+1][1]; } if(s[i]!='X') { for(int j=1;j<=k+1;j++) r[i][j][1]|=(r[i+1][j][0]|r[i+1][j][1]); } } for(int i=1;i<=n;i++) if(s[i]!='X') { for(int j=0;j<=k;j++) if((l[i-1][j][0]|l[i-1][j][1])&&(r[i+1][j+1][0]|r[i+1][j+1][1])) { white[i]=1; break; } } for(int i=1;i<=n;i++) if(s[i]!='_') { for(int j=1;j<=k;j++) if(i>=c[j]&&sum[i]-sum[i-c[j]]==c[j]&&l[i-c[j]][j-1][1]&&r[i+1][j+1][1]) { black[i-c[j]+1]++; black[i+1]--; } } for(int i=1;i<=n;i++) black[i]+=black[i-1]; for(int i=1;i<=n;i++) black[i]=(black[i]>0); string kq=""; for(int i=1;i<=n;i++) { if(black[i]==1&&white[i]==1) { kq.pb('?'); continue; } if(black[i]) kq.pb('X'); else kq.pb('_'); } return kq; } #ifdef SKY int main() { freopen("A.inp","r",stdin); freopen("A.out","w",stdout); string s; cin>>s; int k; vector<int>c; cin>>k; for(int i=1;i<=k;i++) { int u; cin>>u; c.pb(u); } cout<<solve_puzzle(s,c); } #endif
#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...