제출 #117103

#제출 시각아이디문제언어결과실행 시간메모리
117103MeloricPaint By Numbers (IOI16_paint)C++14
100 / 100
1046 ms105736 KiB
#include "paint.h" #include <iostream> #include <cstdlib> #define pb push_back #define pii pair<int, int> #define X first #define Y second using namespace std; vector<vector<int>> mem; vector<int> whi; vector<pii> ans; int n, k; int dp(int i, int j, string &s, vector<int>& c){ if(i >= n && j == k)return 1; if(i >= n)return 0; if(j==k && s[i] == 'X')return 0; if(mem[i][j]!=-1)return mem[i][j]; int val = 0; if(s[i]!='X'){ if(dp(i+1, j, s, c)){ ans[i].X = 1; val = 1; //cout << i << ' '<<j <<'i'<<'\n'; } } if(j != k && i+c[j] < whi.size() && whi[i+c[j]]-whi[i] == 0){ if(i+c[j] == s.size() || s[i+c[j]] != 'X'){ if(dp(i+c[j]+1, j+1, s, c)){ ans[i+c[j]].X = 1; ans[i].Y++; ans[i+c[j]].Y--; val = 1; } } } mem[i][j] = val; return val; } string solve_puzzle(string s, vector<int> c) { n = s.size(); k = c.size(); mem.assign(n+1, vector<int>(k+1, -1)); ans.assign(n+1, {0, 0}); whi.pb(0); for(auto i : s){ if(i == '_'){ whi.pb(whi.back()+1); }else{ whi.pb(whi.back()); } } dp(0, 0, s, c); for(int i = 1; i < ans.size(); i++){ ans[i].Y+=ans[i-1].Y; } string ret; for(int i = 0; i < ans.size()-1; i++){ if(ans[i].X == 1 && ans[i].Y>0){ ret.pb('?'); continue; } if(ans[i].X == 1){ ret.pb('_'); continue; } if(ans[i].Y>0){ ret.pb('X'); continue; } } /* for(auto i : mem){ for(auto j : i){ cout << j <<' '; } cout << '\n'; } for(auto i : ans){ cout << i.X << ' '; }*/ //cout << ret; return ret; }

컴파일 시 표준 에러 (stderr) 메시지

paint.cpp: In function 'int dp(int, int, std::__cxx11::string&, std::vector<int>&)':
paint.cpp:27:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(j != k && i+c[j] < whi.size() && whi[i+c[j]]-whi[i] == 0){
                  ~~~~~~~^~~~~~~~~~~~
paint.cpp:28:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(i+c[j] == s.size() || s[i+c[j]] != 'X'){
            ~~~~~~~^~~~~~~~~~~
paint.cpp: In function 'std::__cxx11::string solve_puzzle(std::__cxx11::string, std::vector<int>)':
paint.cpp:53:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 1; i < ans.size(); i++){
                    ~~^~~~~~~~~~~~
paint.cpp:57:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < ans.size()-1; 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...