Submission #138255

#TimeUsernameProblemLanguageResultExecution timeMemory
138255DanerZeinPaint By Numbers (IOI16_paint)C++14
0 / 100
2 ms380 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;
  for(int i=0;i<s.size();i++){
    int cb=0;
    if(s[i]=='_'){
      
      if(c[k]==0){
	k++;
      }
      rp+='_';
      continue;
    }
    for(int j=i;j<s.size();j++){
      if(s[i]=='_'){
	break;
      }
      cb++;
    }
    if(abs(i-cb)>=c[k]){
      if(c[k]==c1[k]){
	li.push_back(ii(i,0));
      }
      if(c[k]==0){
	rp+='_';
	k++;
	continue;
      }
      c[k]--;
      rp+='X';
    }
    else{
      if(c[k]==0){
	k++;
      }
      rp+='_';
    }
  }
  string rp1;
  rp1.resize(rp.size());
  k=c.size()-1;
  for(int i=s.size()-1;i>=0;i--){
    int cb=0;
    if(s[i]=='_'){
      if(c1[k]==0){
	k--;
      }
      rp1[i]='_';
      continue;
    }
    for(int j=i;j<s.size();j++){
      if(s[i]=='_'){
	break;
      }
      cb++;
    }
    if(abs(i-cb)>=c1[k]){
      if(c1[k]==aux[k]){
	li[k].second=i;
      }
      if(c1[k]==0){
	
	rp1[i]='_';
	k--;
	continue;
      }
      c1[k]--;
      rp1[i]='X';
    }
    else{
      if(c1[k]==0){
	k--;
      }
      rp1[i]='_';
    }
  }
  // cout<<rp<<endl;
  // cout<<rp1<<endl;
  string ans;
  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';
      }
      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
	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:11:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<s.size();i++){
               ~^~~~~~~~~
paint.cpp:21:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int j=i;j<s.size();j++){
                 ~^~~~~~~~~
paint.cpp:58:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int j=i;j<s.size();j++){
                 ~^~~~~~~~~
paint.cpp:88:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0;i<li.size();i++){
               ~^~~~~~~~~~
paint.cpp:119: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...