이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
bool space[200001];
int add[200002];
bool dp[200001][101], dp2[200001][101];
int sum[200001];
string solve_puzzle(string s, vector<int> c){
int n = s.length(), k = c.size();
for(int i=1;i<=n;i++){
if(s[i-1] == '.' || s[i-1] == 'X') sum[i]++;
sum[i] += sum[i-1];
}
dp[0][0] = 1;
for(int i=1;i<=n;i++){
for(int j=0;j<=k;j++){
if(dp[i-1][j] && (s[i-1] == '_' || s[i-1] == '.')) dp[i][j] = 1;
if(j == 0){
if(j < k && i >= c[j] && sum[i]-sum[i-c[j]] == c[j] && dp[i-c[j]][j]){
dp[i][j+1] = 1;
}
}
else{
if(j < k && i >= c[j]+1 && sum[i]-sum[i-c[j]] == c[j] && (s[i-c[j]-1] == '_' || s[i-c[j]-1] == '.')){
dp[i][j+1] |= dp[i-c[j]-1][j];
}
}
}
}
dp2[n][k] = 1;
for(int i=n;i>=1;i--){
for(int j=k;j>=0;j--){
if(dp2[i][j]){
if(dp[i-1][j] && (s[i-1] == '_' || s[i-1] == '.')){
dp2[i-1][j] = 1;
space[i] = 1;
}
if(j == 1){
if(j > 0 && i >= c[j-1] && sum[i]-sum[i-c[j-1]] == c[j-1] && dp[i-c[j-1]][j-1]){
add[i]++;
add[i-c[j-1]]--;
dp2[i-c[j-1]][j-1] = 1;
}
}
else{
if(j > 0 && i >= c[j-1]+1 && sum[i]-sum[i-c[j-1]] == c[j-1] && dp[i-c[j-1]-1][j-1] && (s[i-c[j-1]-1] == '_' || s[i-c[j-1]-1] == '.')){
add[i]++;
add[i-c[j-1]]--;
space[i-c[j-1]] = 1;
dp2[i-c[j-1]-1][j-1] = 1;
}
}
}
}
}
string ans = "";
for(int i=0;i<n;i++) ans += '?';
for(int i=n;i>=1;i--){
add[i] += add[i+1];
if(add[i] && !space[i]) ans[i-1] = 'X';
else if(!add[i] && space[i]) ans[i-1] = '_';
}
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... |