이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "paint.h"
#include <bits/stdc++.h>
using namespace std;
const int MAXK = 110;
const int MAXN = 200010;
int n, k;
int canWhite[MAXN];
int canBlack[MAXN];
bool prefix[MAXN][MAXK][2];
bool suffix[MAXN][MAXK][2];
string solve_puzzle(string s, vector<int> c)
{
n = (int)s.size(); k = (int)c.size();
c.insert( c.begin() , -1 );
s.insert( s.begin() , 'o' );
prefix[0][0][0] = prefix[0][0][1] = true;
suffix[n + 1][k + 1][0] = suffix[n + 1][k + 1][1] = true;
for(int j = 0 ; j <= k ; j++)
{
for(int i = 1 ; i <= n ; i++)
{
if( s[i] == '_' || s[i] == '.' )
{
prefix[i][j][0] = prefix[i - 1][j][1];
prefix[i][j][1] = prefix[i - 1][j][1];
}
if( ( s[i] == 'X' || s[i] == '.' ) && j > 0 && i - c[j] >= 0 )
prefix[i][j][1] = prefix[i][j][1] || prefix[i - c[j]][j - 1][0];
}
}
for(int j = k + 1 ; j > 0 ; j--)
{
for(int i = n ; i > 0 ; i--)
{
if( s[i] == '_' || s[i] == '.' )
{
suffix[i][j][0] = suffix[i + 1][j][1];
suffix[i][j][1] = suffix[i + 1][j][1];
}
if( ( s[i] == 'X' || s[i] == '.' ) && j <= k && i + c[j] - 1 <= n )
suffix[i][j][1] = suffix[i][j][1] || suffix[i + c[j]][j + 1][0];
}
}
for(int i = 1 ; i <= n ; i++)
for(int j = 0 ; j <= k ; j++)
if( prefix[i - 1][j][1] && suffix[i + 1][j + 1][1] ) canWhite[i]++;
for(int j = 1 ; j <= k ; j++)
{
int sum = 0;
for(int R = 1 ; R <= n ; R++)
{
int L = R - c[j] + 1;
if( s[R] == '_' ) sum++;
if( L > 0 && s[L - 1] == '_' ) sum--;
if( sum != 0 || L <= 0 ) continue;
if( prefix[L - 1][j - 1][0] && suffix[R + 1][j + 1][0] )
{
canBlack[L]++;
canBlack[R + 1]--;
}
}
}
for(int i = 1 ; i <= n ; i++)
canBlack[i] += canBlack[i - 1];
string ans;
for(int i = 1 ; i <= n ; i++)
{
if( s[i] != '.' )
{
ans.push_back( s[i] );
continue;
}
if( canWhite[i] > 0 && canBlack[i] > 0 ) ans.push_back( '?' );
if( canWhite[i] > 0 && canBlack[i] == 0 ) ans.push_back( '_' );
if( canWhite[i] == 0 && canBlack[i] > 0 ) ans.push_back( '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... |