# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
138406 | DanerZein | Paint By Numbers (IOI16_paint) | C++14 | 2 ms | 376 KiB |
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 "paint.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> ii;
std::string solve_puzzle(std::string s, std::vector<int> c) {
vector<ii>li;
vector<int>c1=c,aux=c;
string rp;
int k=0,j=0;
while(true){
if(k==c.size()){
break;
}
if(j==s.size()-1){
break;
}
int cb=0;
for(int i=j;i<s.size();i++){
if(s[i]=='_'){
break;
}
cb=i;
}
if(abs(j-cb)>=c[k]){
for(;j<s.size();j++){
if(c[k]==aux[k]){
li.push_back(ii(j,0));
}
rp+='X';
c[k]--;
if(c[k]==0){
break;
}
}
if(aux[k]==1){
j++;
}
if(rp.size()+1<=s.size())
rp+='_';
j+=1;
k++;
}
else{
rp+='_';
j++;
}
}
for(int i=rp.size();i<s.size();i++){
rp+='_';
}
string rp1;
reverse(s.begin(),s.end());
k=c.size()-1;
j=0;
int o=rp.size()-1;
while(true){
if(k==-1){
break;
}
if(j==s.size()-1){
break;
}
int cb=j;
for(int i=j;i<s.size();i++){
if(s[i]=='_'){
break;
}
cb=i;
}
if(abs(j-cb)>=c1[k]){
for(;j<s.size();j++){
rp1+='X';
if(c1[k]==aux[k]){
li[k].second=o;
}
c1[k]--;
if(c1[k]==0){
break;
}
o--;
}
if(aux[k]==1){
j++;
o--;
}
if(rp1.size()+1<=s.size())
rp1+='_';
j+=1;
o--;
k--;
}
else{
rp1+='_';
j++;
o--;
}
}
for(int i=rp1.size();i<s.size();i++){
rp1+='_';
}
// cout<<rp1<<endl;
reverse(s.begin(),s.end());
reverse(rp1.begin(),rp1.end());
//cout<<rp<<endl;
// cout<<rp1<<endl;
string ans;
/* for(int i=0;i<li.size();i++){
cout<<li[i].first<<" "<<li[i].second<<endl;
}*/
ans.resize(rp.size());
for(int i=0;i<li.size();i++){
for(int j=li[i].first;j<=li[i].second;j++){
if(rp[j]=='X' and rp[j]==rp1[j]){
ans[j]='X';
aux[i]--;
}
else if(s[j]=='_'){
int cb=0;
for(k=j+1;k<=li[i].second;k++){
if(s[k]=='_'){
break;
}
cb++;
}
if(cb>=aux[i]){
ans[j]='_';
}
else{
for(k=j+1;k<li[i].second;k++){
if(s[k]=='_'){
ans[k]='_';
break;
}
ans[k]='_';
}
j=k;
}
}
else{
aux[i]--;
ans[j]='?';
}
}
}
for(int i=0;i<ans.size();i++){
if(ans[i]!='X' and ans[i]!='?' and ans[i]!='_'){
ans[i]='_';
}
}
return ans;
}
Compilation message (stderr)
# | 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... |