Submission #125805

#TimeUsernameProblemLanguageResultExecution timeMemory
125805tinjyuPaint By Numbers (IOI16_paint)C++14
90 / 100
2053 ms2936 KiB
#include "paint.h" #include <cstdlib> #include <iostream> using namespace std; long long int lastx,w[200005],b[200005],m,n,c[5005],tag[105][200005]; string s; string a; long long int find(int p,int now) { //cout<<p<<" "<<now<<endl; if(tag[p][now]!=0)return tag[p][now]; if(p==m) { //cout<<now<<" "<<lastx<<endl; if(now-1<lastx)return 2; return 1; } tag[p][now]=2; long long int maxb=-1,maxw=-1; for(int i=now;i<c[p]+now;i++)if(s[i]=='_')maxw=i; for(int i=now;i<c[p]+now;i++) { if(s[i]=='X') { maxb=i; break; } } for(int i=now;i+c[p]-1<n;i++) { //cout<<i<<endl; long long int cnt=0; if(s[i+c[p]-1]=='X' && maxb==-1)maxb=i+c[p]-1; if(i>maxb && maxb!=-1)break; if(s[i+c[p]-1]=='_')maxw=i+c[p]-1; if(cnt==1 || s[c[p]+i]=='X' || maxw>=i)continue; if(find(p+1,i+c[p]+1)==1) { //cout<<p<<" "<<now<<" "<<i<<endl; //cout<<a<<endl; tag[p][i]=1; for(int j=now;j<i;j++) { if(a[j]=='.')a[j]='_'; if(a[j]=='X')a[j]='?'; } //cout<<a<<endl; for(int j=i;j<i+c[p];j++) { if(a[j]=='.')a[j]='X'; if(a[j]=='_')a[j]='?'; } //cout<<a<<endl; if(p!=m-1) { if(a[i+c[p]]=='.')a[i+c[p]]='_'; if(a[i+c[p]]=='X')a[i+c[p]]='?'; } else { for(int j=i+c[p];j<n;j++) { if(a[j]=='.')a[j]='_'; if(a[j]=='X')a[j]='?'; } } tag[p][now]=1; //cout<<a<<endl; } } return tag[p][now]; } std::string solve_puzzle(std::string x, std::vector<int> l) { s=x; a=x; m=l.size(); n=s.length(); lastx=-1; for(int i=0;i<n;i++) { a[i]=s[i]; if(s[i]=='X')lastx=i; } for(int i=0;i<m;i++)c[i]=l[i]; find(0,0); //cout<<a<<endl; return a; }
#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...