제출 #206648

#제출 시각아이디문제언어결과실행 시간메모리
206648kshitij_sodaniPaint By Numbers (IOI16_paint)C++17
59 / 100
5 ms380 KiB
#include <iostream> #include <bits/stdc++.h> #include <paint.h> using namespace std; #define mp make_pair #define pb push_back typedef long long llo; #define a first #define b second #define endl "\n" string solve_puzzle(string s,vector<int> c){ int k=c.size(); int n=s.size(); char ss[n]; strcpy(ss,s.c_str()); int it[n]; for(int i=0;i<n;i++){ if(ss[i]=='.'){ it[i]=0; } else if(ss[i]=='_'){ it[i]=1; } else{ it[i]=2; } } vector<pair<int,int>> seg; int st=0; for(int i=0;i<n;i++){ if(st==0 and it[i]==0){ st=1; seg.pb(mp(i,i)); } else{ if(it[i]==0){ seg[seg.size()-1].b+=1; } else{ st=0; } } } /*for(int i=0;i<seg.size();i++){ cout<<seg[i].a<<" "<<seg[i].b<<endl; }*/ int ind2=0; int ind3=0; pair<pair<int,int>,pair<int,int>> ind[n]; for(int i=0;i<k;i++){ ind3=max(ind3,seg[ind2].a); while(seg[ind2].b-ind3+1<c[i]){ ind2+=1; ind3=max(ind3,seg[ind2].a); } ind[i].a=mp(ind2,ind3); // cout<<ind2<<" "<<ind3<<" "<<i<<endl; ind3+=c[i]+1; } ind2=seg.size()-1; ind3=n-1; for(int i=k-1;i>=0;i--){ ind3=min(ind3,seg[ind2].b); while(ind3-seg[ind2].a+1<c[i]){ ind2-=1; ind3=min(ind3,seg[ind2].b); } ind[i].b=mp(ind2,ind3); // cout<<ind2<<" "<<ind3<<" "<<i<<endl; ind3-=c[i]+1; } int fill[n]; memset(fill,0,sizeof(fill)); char ans[n]; for(int i=0;i<n;i++){ ans[i]=ss[i]; if(ans[i]=='.'){ ans[i]='?'; } } for(int i=0;i<k;i++){ int fill2[n]; memset(fill2,0,sizeof(fill2)); if(ind[i].a.a==ind[i].b.a){ for(int j=ind[i].a.b;j<ind[i].a.b+c[i];j++){ fill2[j]+=1; // cout<<j<<" "; } for(int j=ind[i].b.b;j>ind[i].b.b-c[i];j--){ fill2[j]+=1; //cout<<j<<" "; if(fill2[j]==2){ ans[j]='X'; // cout<<j<<","; } } // cout<<endl; } for(int j=ind[i].a.a+1;j<ind[i].b.a;j++){ if(seg[j].b-seg[j].a+1>=c[i]){ for(int ii=seg[j].a;ii<seg[j].b+1;ii++){ fill[ii]+=1; } } } for(int j=ind[i].a.b;j<min(seg[ind[i].a.a].b+1,ind[i].b.b+1);j++){ fill[j]+=1; // cout<<j<<":"; } // cout<<endl; for(int j=ind[i].b.b;j>=max(seg[ind[i].b.a].a,ind[i].a.b);j--){ fill[j]+=1; // cout<<j<<":"; } // cout<<endl; } for(int i=0;i<n;i++){ if(fill[i]==0){ ans[i]='_'; } } string ans2=""; for(int i=0;i<n;i++){ ans2+=ans[i]; } return ans2; } /*int main(){ vector<int> bb={2,3}; cout<<solve_puzzle("..._..._....", {3,4}); return 0; }*/
#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...