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 <iostream>
#include <bits/stdc++.h>
#include <paint.h>
using namespace std;
#define mp make_pair
#define pb push_back
typedef long long llo;
#define a first
#define b second
#define endl "\n"
string solve_puzzle(string s,vector<int> c){
int k=c.size();
int n=s.size();
char ss[n];
strcpy(ss,s.c_str());
int it[n];
for(int i=0;i<n;i++){
if(ss[i]=='.'){
it[i]=0;
}
else if(ss[i]=='_'){
it[i]=1;
}
else{
it[i]=2;
}
}
vector<pair<int,int>> seg;
int st=0;
for(int i=0;i<n;i++){
if(st==0 and it[i]==0){
st=1;
seg.pb(mp(i,i));
}
else{
if(it[i]==0){
seg[seg.size()-1].b+=1;
}
else{
st=0;
}
}
}
for(int i=0;i<seg.size();i++){
cout<<seg[i].a<<" "<<seg[i].b<<endl;
}
int ind2=0;
int ind3=0;
pair<pair<int,int>,pair<int,int>> ind[n];
for(int i=0;i<k;i++){
ind3=max(ind3,seg[ind2].a);
while(seg[ind2].b-ind3+1<c[i]){
ind2+=1;
ind3=max(ind3,seg[ind2].a);
}
ind[i].a=mp(ind2,ind3);
// cout<<ind2<<" "<<ind3<<" "<<i<<endl;
ind3+=c[i]+1;
}
ind2=seg.size()-1;
ind3=n-1;
for(int i=k-1;i>=0;i--){
ind3=min(ind3,seg[ind2].b);
while(ind3-seg[ind2].a+1<c[i]){
ind2-=1;
ind3=min(ind3,seg[ind2].b);
}
ind[i].b=mp(ind2,ind3);
// cout<<ind2<<" "<<ind3<<" "<<i<<endl;
ind3-=c[i]+1;
}
int fill[n];
memset(fill,0,sizeof(fill));
char ans[n];
for(int i=0;i<n;i++){
ans[i]=ss[i];
if(ans[i]=='.'){
ans[i]='?';
}
}
for(int i=0;i<k;i++){
int fill2[n];
memset(fill2,0,sizeof(fill2));
if(ind[i].a.a==ind[i].b.a){
for(int j=ind[i].a.b;j<ind[i].a.b+c[i];j++){
fill2[j]+=1;
// cout<<j<<" ";
}
for(int j=ind[i].b.b;j>ind[i].b.b-c[i];j--){
fill2[j]+=1;
//cout<<j<<" ";
if(fill2[j]==2){
ans[j]='X';
// cout<<j<<",";
}
}
// cout<<endl;
}
for(int j=ind[i].a.a+1;j<ind[i].b.a;j++){
if(seg[j].b-seg[j].a+1>=c[i]){
for(int ii=seg[j].a;ii<seg[j].b+1;ii++){
fill[ii]+=1;
}
}
}
for(int j=ind[i].a.b;j<min(seg[ind[i].a.a].b+1,ind[i].b.b+1);j++){
fill[j]+=1;
// cout<<j<<":";
}
// cout<<endl;
for(int j=ind[i].b.b;j>=max(seg[ind[i].b.a].a,ind[i].a.b);j--){
fill[j]+=1;
// cout<<j<<":";
}
// cout<<endl;
}
for(int i=0;i<n;i++){
if(fill[i]==0){
ans[i]='_';
}
}
string ans2="";
for(int i=0;i<n;i++){
ans2+=ans[i];
}
return ans2;
}
/*int main(){
vector<int> bb={2,3};
cout<<solve_puzzle("..._..._....", {3,4});
return 0;
}*/
Compilation message (stderr)
paint.cpp: In function 'std::__cxx11::string solve_puzzle(std::__cxx11::string, std::vector<int>)':
paint.cpp:44:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<seg.size();i++){
~^~~~~~~~~~~
# | 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... |