제출 #637258

#제출 시각아이디문제언어결과실행 시간메모리
637258ggohPaint By Numbers (IOI16_paint)C++14
80 / 100
2 ms2644 KiB
#include "paint.h" #include<bits/stdc++.h> using namespace std; #define sz(v) ((int)(v).size()) typedef long long lint; int A[102][2]; int D[102][102][102][2]; int C[200002]; string S; int n,m; int f(int p,int q,int r,int going) { int ret1=0,ret2=0,ret=0; if(D[p][q][r][going])return D[p][q][r][going]; if(p==n) { if(going) { if(C[q]==r && q==m-1)ret=1; else ret=-1; } else { if(q==m)ret=1; else ret=-1; } return D[p][q][r][going]=ret; } if(S[p]=='X'||S[p]=='.') { if(going) { if(C[q]<r+1)ret1=-1; else ret1=f(p+1,q,r+1,going); } else { if(q==m)ret1=-1; else ret1=f(p+1,q,1,1); } if(ret1==1)A[p][1]=1; } if(S[p]=='_'||S[p]=='.') { if(going) { if(r!=C[q])ret2=-1; else ret2=f(p+1,q+1,0,0); } else { ret2=f(p+1,q,0,0); } if(ret2==1)A[p][0]=1; } if(ret1==1||ret2==1)ret=1; else ret=-1; if(S[p]=='X')return D[p][q][r][going]=ret1; else if(S[p]=='_')return D[p][q][r][going]=ret2; else return D[p][q][r][going]=ret; } string solve_puzzle(string s, vector<int> c) { string ans; S=s; n=s.length(); m=sz(c); for(int i=0;i<m;i++)C[i]=c[i]; f(0,0,0,0); for(int i=0;i<n;i++) { if(A[i][0] && A[i][1])ans+='?'; else if(A[i][0])ans+='_'; else ans+='X'; } 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...