Submission #138899

#TimeUsernameProblemLanguageResultExecution timeMemory
138899DanerZeinPaint By Numbers (IOI16_paint)C++14
0 / 100
5 ms632 KiB
#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()){
      break;
    }
    if(s[j]=='_'){
      rp+='_';
      j++;
      continue;
    }
    int cb=0;
    for(int i=j;i<s.size();i++){
      if(s[i]=='_'){
	break;
      }
      cb++;
    }
    if(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;
	}
      }
      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;
  k=c.size()-1;
  j=rp.size()-1;
  rp1.resize(rp.size());
  while(j!=-1){
    // cout<<j<<" "<<k<<endl;
    if(j<=-1){
      break;
    }
    if(k<=-1){
      break;
    }
    if(s[j]=='_'){
      rp1[j]='_';
      j--;
      continue;
    }
    int cb=0;
    for(int i=j;i>=0;i--){
      if(s[i]=='_'){
	break;
      }
      cb++;
    }
    // cout<<cb<<" c[k]: "<<c[k]<<endl;
    if(cb>=c1[k]){
      for(;j>=0;j--){
	rp1[j]='X';
	
	if(c1[k]==aux[k]){
	  li[k].second=j;
	}
	c1[k]--;
	if(c1[k]==0){
	  break;
	}
      }
      k--;
      j--;
      rp1[j]='_';
      j--;
    }
    else{
      rp1[j]='_';
      j--;
    }
  }
  for(;j>=0;j--){
    rp1[j]='_';
  }
  // 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++){
      int l,r;
      r=li[i].first+aux[i];
      l=li[i].second-aux[i];
      for(k=l;k<=r;k++){
	if(rp[k]=='X' and rp1[k]=='X'){
	  ans[k]='X';
	}
      }
      
      for(k=li[i].first;k<=li[i].second;k++){
	if(s[k]=='_'){
	  ans[k]='_';
	}
	if(ans[k]!='_' and ans[k]!='X'){
	  ans[k]='?';
	}
      }
  }
  //  cout<<ans<<endl;
  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)

paint.cpp: In function 'std::__cxx11::string solve_puzzle(std::__cxx11::string, std::vector<int>)':
paint.cpp:12:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(k==c.size()){
        ~^~~~~~~~~~
paint.cpp:15:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(j==s.size()){
        ~^~~~~~~~~~
paint.cpp:24:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=j;i<s.size();i++){
                 ~^~~~~~~~~
paint.cpp:31:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(;j<s.size();j++){
            ~^~~~~~~~~
paint.cpp:52:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=rp.size();i<s.size();i++){
                       ~^~~~~~~~~
paint.cpp:112:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<li.size();i++){
               ~^~~~~~~~~~
paint.cpp:132:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<ans.size();i++){
               ~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...