이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "paint.h"
#include<bits/stdc++.h>
#include <cstdlib>
using namespace std;
bool dp[200005][205];
int n, prx[200005], k, pre[200005], canx[200005], cane[200005];
set<int>pos[205];
string ans;
string solve_puzzle(string s, vector<int> c)
{
n=s.length();
k=c.size();
for(int i=0; i<n; i++)
{
if(s[i]=='X') prx[i]=1;
if(s[i]=='_') pre[i]=1;
if(i) prx[i]+=prx[i-1], pre[i]+=pre[i-1];
}
for(int i=0; i<n; i++)
{
for(int j=0; j<k; j++)
{
if((j and pos[j-1].size()==0) or i-c[j]+1<0) continue;
if(!j)
{
if(pre[i]-pre[i-c[j]]==0 and prx[i-c[j]]==0)
{
dp[i][j]=1;
pos[j].insert(i);
}
continue;
}
auto it=pos[j-1].upper_bound(i-c[j]-1);
if(it==pos[j-1].begin()) continue;
--it;
if(pre[i]-pre[i-c[j]]==0 and prx[i-c[j]]-prx[*it]==0)
{
dp[i][j]=1;
pos[j].insert(i);
}
}
}
int last=n-1;
/*for(int i=0; i<k; i++)
{
cout<<"pos["<<i<<"] = ";
for(int u : pos[i])
cout<<u<<' ';
cout<<endl;
}*/
for(int j=k-1; j>=0; j--)
{
auto it=pos[j].begin();
cane[(*it)+1]++;
cane[last+2]--;
// cout<<"in cane : "<<(*it)+1<<' '<<last<<endl;
auto it2=pos[j].upper_bound(last);
--it2;
last=((*it2)-c[j]-1);
for(; ; --it)
{
// (*it)-c[j]+1 ... (*it)
canx[(*it)-c[j]+1]++;
canx[(*it)+1]--;
if(it2==pos[j].begin()) break;
}
// cout<<"last "<<last<<endl;
}
if(last+2>=0) cane[0]++, cane[last+2]--;
for(int i=1; i<n; i++)
cane[i]+=cane[i-1], canx[i]+=canx[i-1];
for(int i=0; i<n; i++)
{
// cout<<i<<' '<<canx[i]<<' '<<cane[i]<<endl;
if(s[i]=='.')
{
if(cane[i] and canx[i]) ans+='?';
else if(cane[i]) ans+='_';
else ans+='X';
}
else ans+=s[i];
}
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... |