This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include <cassert>
using namespace std;
int N, K;
string S;
vector <int> C;
bool puede_[200010];
bool puedeX[200010];
int blanks[200010];
int exes[200010];
int DP[200010][110];
int dp(int i, int j){
if (DP[i][j] != -1){
return DP[i][j];
} else {
int v1 = 0, v2 = 0;
if (i == N){
if (j < K){
DP[i][j] = 0;
return 0;
} else{
DP[i][j] = 1;
return 1;
}
}
if (j<K && N-i < C[j]){
DP[i][j] = 0;
return 0;
}
if (j == K){
if (exes[N-1]==exes[i-1]){
puede_[i] = true;
for (int x = i; x < N; ++x){
puede_[x] = true;
}
DP[i][j] = 1;
return 1;
} else{
DP[i][j] = 0;
return 0;
}
}
if (S[i] != 'X' && dp(i+1,j)){
v1 = 1;
puede_[i] = true;
}
if (i == 0){
if (S[i+C[j]] != 'X' && blanks[i+C[j]-1] == 0){
if(S[i] != '_'&&dp(i+C[j]+1,j+1)){
v2 = 1;
puedeX[i] = true;
puede_[i+C[j]] = true;
for (int x = 0; x < C[j]; ++x){
puedeX[i+x] = true;
}
}
}
} else if ((S[i+C[j]] != 'X' || i+C[j] >= N) && blanks[i+C[j]-1] == blanks[i-1]){
if(dp(i+C[j]+1,j+1)){
v2 = 1;
puedeX[i] = true;
puede_[i+C[j]] = true;
for (int x = 0; x < C[j]; ++x){
puedeX[i+x] = true;
}
}
}
DP[i][j] = v1|v2;
return v1|v2;
}
}
string solve_puzzle(string s, vector<int> c) {
memset(DP, -1, sizeof(DP));
string salida = "";
s+="_";
int n = s.size();
int k = c.size();
N = n;
K = k;
S = s;
C = c;
int counter = 0;
for (int i = 0; i < N; ++i){
if (s[i] == '_'){
counter++;
}
blanks[i] = counter;
}
counter = 0;
for (int i = 0; i < N; ++i){
if (s[i] == 'X'){
counter++;
}
exes[i] = counter;
}
dp(0,0);
for (int i = 0; i < N-1; ++i){
if (puedeX[i] == true){
if (puede_[i] == true){
salida += '?';
} else{
salida += 'X';
}
} else{
salida += '_';
}
}
return salida;
}
# | 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... |