이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |