제출 #781846

#제출 시각아이디문제언어결과실행 시간메모리
781846BT21tataPaint By Numbers (IOI16_paint)C++17
0 / 100
2069 ms340 KiB
#include "paint.h" #include<bits/stdc++.h> #include <cstdlib> using namespace std; bool dp[200005][205]; int n, prx[200005], k, pre[200005], canx[200005], cane[200005]; set<int>pos[205]; string ans; string solve_puzzle(string s, vector<int> c) { n=s.length(); k=c.size(); for(int i=0; i<n; i++) { if(s[i]=='X') prx[i]=1; if(s[i]=='_') pre[i]=1; if(i) prx[i]+=prx[i-1], pre[i]+=pre[i-1]; } for(int i=0; i<n; i++) { for(int j=0; j<k; j++) { if((j and pos[j-1].size()==0) or i-c[j]+1<0) continue; if(!j) { if(pre[i]-pre[i-c[j]]==0 and prx[i-c[j]]==0) { dp[i][j]=1; pos[j].insert(i); } continue; } auto it=pos[j-1].upper_bound(i-c[j]-1); if(it==pos[j-1].begin()) continue; --it; if(pre[i]-pre[i-c[j]]==0 and prx[i-c[j]]-prx[*it]==0) { dp[i][j]=1; pos[j].insert(i); } } } int last=n-1; /*for(int i=0; i<k; i++) { cout<<"pos["<<i<<"] = "; for(int u : pos[i]) cout<<u<<' '; cout<<endl; }*/ for(int j=k-1; j>=0; j--) { auto it=pos[j].begin(); cane[(*it)+1]++; cane[last+2]--; // cout<<"in cane : "<<(*it)+1<<' '<<last<<endl; auto it2=pos[j].upper_bound(last); --it2; last=((*it2)-c[j]-1); for(; ; --it) { // (*it)-c[j]+1 ... (*it) canx[(*it)-c[j]+1]++; canx[(*it)+1]--; if(it2==pos[j].begin()) break; } // cout<<"last "<<last<<endl; } if(last+2>=0) cane[0]++, cane[last+2]--; for(int i=1; i<n; i++) cane[i]+=cane[i-1], canx[i]+=canx[i-1]; for(int i=0; i<n; i++) { // cout<<i<<' '<<canx[i]<<' '<<cane[i]<<endl; if(s[i]=='.') { if(cane[i] and canx[i]) ans+='?'; else if(cane[i]) ans+='_'; else ans+='X'; } else ans+=s[i]; } return ans; }
#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...