Submission #138406

#TimeUsernameProblemLanguageResultExecution timeMemory
138406DanerZeinPaint By Numbers (IOI16_paint)C++14
0 / 100
2 ms376 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()-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)

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()-1){
        ~^~~~~~~~~~~~
paint.cpp:19:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=j;i<s.size();i++){
                 ~^~~~~~~~~
paint.cpp:26:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(;j<s.size();j++){
            ~^~~~~~~~~
paint.cpp:49:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=rp.size();i<s.size();i++){
                       ~^~~~~~~~~
paint.cpp:61:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(j==s.size()-1){
        ~^~~~~~~~~~~~
paint.cpp:65:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=j;i<s.size();i++){
                 ~^~~~~~~~~
paint.cpp:72:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(;j<s.size();j++){
            ~^~~~~~~~~
paint.cpp:99:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=rp1.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:146: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...