Submission #392112

#TimeUsernameProblemLanguageResultExecution timeMemory
392112AugustinasJucasPaint By Numbers (IOI16_paint)C++14
80 / 100
8 ms10732 KiB
#include <bits/stdc++.h> using namespace std; const int dydis = 1e2 + 10; int dp[dydis][dydis][dydis][2]; // jei esu i-ajame characteryje, j-ojoje grupeje, jau su manimi is viso yra h bloku, o as esu l characteris, tai ar galima taip padaryt? string S; vector<int> mas; int hsh(char a){ if(a == '_') return 0; if(a == 'X') return 1; return 2; } int galiButi[dydis][2] = {0}; bool galima(int i1, int i2, int sitasBlokasJau, int asEsu){ // cout << "dp[" << i1 << "][" << i2 << "][" << sitasBlokasJau << "][" << asEsu << "] = ?\n"; if(i1 == S.size()){ if(i2 == mas.size() && sitasBlokasJau == 0) return true; return false; } if(sitasBlokasJau == 1 && i2 == mas.size()) return false; if(S[i1] != '.'){ if(hsh(S[i1]) != asEsu) return false; } if(dp[i1][i2][sitasBlokasJau][asEsu] != -1) return dp[i1][i2][sitasBlokasJau][asEsu]; // dabar kazka desiu i kita! bool ret = 0; if(asEsu == hsh('_')){ // jei as esu _, tai toliau galiu testi save, arba pradeti nauja etapa bool p1 = 0, p2 = 0; p1 = galima(i1+1, i2, 1, hsh('X')); p2 = galima(i1+1, i2, 0, hsh('_')); ret = p1 | p2; }else{ // jei as esu X, tai privalau arba testi, arba privalau uzbaigti etapa if(sitasBlokasJau == mas[i2]) { // privalau uzbaigti ret = galima(i1+1, i2+1, 0, hsh('_')); }else{ // privalau testi ret = galima(i1+1, i2, sitasBlokasJau+1, hsh('X')); } } if(ret){ galiButi[i1][asEsu] = 1; } // cout << "dp[" << i1 << "][" << i2 << "][" << sitasBlokasJau << "][" << asEsu << "] = " << ret << endl; return dp[i1][i2][sitasBlokasJau][asEsu] = ret; // esu jau nustates S[i1] } string solve_puzzle(string s, vector<int> c) { for(int i = 0; i < dydis; i++){ for(int j = 0; j < dydis; j++){ for(int h = 0; h < dydis; h++){ for(int l = 0; l < 2; l++){ dp[i][j][h][l] = -1; } } } } int k = c.size(); S = s; mas = c; galima(0, 0, 0, hsh('_')); galima(0, 0, 1, hsh('X')); string ret = ""; for(int i = 0; i < s.size(); i++){ if(galiButi[i][hsh('_')] == 1 && galiButi[i][hsh('X')]){ ret.push_back('?'); }else if(galiButi[i][hsh('X')] == 1){ ret.push_back('X'); }else if(galiButi[i][hsh('_')] == 1){ ret.push_back('_'); }else{ ret.push_back('!'); } } return ret; }

Compilation message (stderr)

paint.cpp: In function 'bool galima(int, int, int, int)':
paint.cpp:17:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 |     if(i1 == S.size()){
      |        ~~~^~~~~~~~~~~
paint.cpp:18:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |         if(i2 == mas.size() && sitasBlokasJau == 0) return true;
      |            ~~~^~~~~~~~~~~~~
paint.cpp:21:34: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   21 |     if(sitasBlokasJau == 1 && i2 == mas.size()) return false;
      |                               ~~~^~~~~~~~~~~~~
paint.cpp:45:46: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   45 |     return dp[i1][i2][sitasBlokasJau][asEsu] = ret;
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
paint.cpp: In function 'std::string solve_puzzle(std::string, std::vector<int>)':
paint.cpp:64:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |     for(int i = 0; i < s.size(); i++){
      |                    ~~^~~~~~~~~~
paint.cpp:58:9: warning: unused variable 'k' [-Wunused-variable]
   58 |     int k = c.size();
      |         ^
#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...