Submission #116343

#TimeUsernameProblemLanguageResultExecution timeMemory
116343deinfreundPaint By Numbers (IOI16_paint)C++14
10 / 100
2025 ms504 KiB
#include "paint.h"

#include <bits/stdc++.h>

using namespace std;

bool solvable(string & s, string & res, vector<int>& c, int remX, int spos, int cpos){
  //cout << "at " << spos << " with " << remX <<"/" << c[cpos] << " remaining" << endl;
  if (spos == s.size()) return cpos == c.size() -1 && remX <= 0;
  if (remX == 0 && s[spos] != '_' && s[spos] != '.') return 0;
  if (remX > 0 && s[spos] != 'X' && s[spos] != '.') return 0;
  if (remX >= 0) {
    if (solvable(s,res,c, remX - 1, spos+1, cpos)){
      if (remX == 0 && res[spos] == '.') res[spos] = '_';
      if (remX == 0 && res[spos] == 'X') res[spos] = '?';
      if (remX > 0 && res[spos] == '.') res[spos] = 'X';
      if (remX > 0 && res[spos] == '_') res[spos] = '?';
      return 1;
    }
    return 0;
  }else{
    bool sol = 0;
    if (s[spos] != 'X' && solvable(s,res,c, remX, spos+1, cpos)){
      //cout << "possible to skip at " << spos << endl;
      if (res[spos] == '.') res[spos] = '_';
      if (res[spos] == 'X') res[spos] = '?';
      sol = 1;
    }
    if (cpos +1< c.size()) return solvable(s,res,c, c[cpos+1], spos, cpos+1) || sol;
    return sol;
  }
}

std::string solve_puzzle(std::string s, std::vector<int> c) {
  string res = s;
  solvable(s,res,c, -1, 0, -1);
  return res;
}

Compilation message (stderr)

paint.cpp: In function 'bool solvable(std::__cxx11::string&, std::__cxx11::string&, std::vector<int>&, int, int, int)':
paint.cpp:9:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (spos == s.size()) return cpos == c.size() -1 && remX <= 0;
       ~~~~~^~~~~~~~~~~
paint.cpp:9:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (spos == s.size()) return cpos == c.size() -1 && remX <= 0;
                                ~~~~~^~~~~~~~~~~~~~
paint.cpp:29:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (cpos +1< c.size()) return solvable(s,res,c, c[cpos+1], spos, cpos+1) || sol;
         ~~~~~~~^~~~~~~~~~
#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...