제출 #126810

#제출 시각아이디문제언어결과실행 시간메모리
126810SortingPaint By Numbers (IOI16_paint)C++14
100 / 100
531 ms54664 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2e5 + 7; const int K = 1e2 + 7; pair<bool, bool> dp[N][K]; string s, ans; vector<int> c; int v[N]; int a[N], n; void make_zero(int idx){ if(ans[idx] == '.'){ ans[idx] = '_'; } else{ if(ans[idx] != '_'){ ans[idx] = '?'; } } } void make_x(int idx){ if(ans[idx] == '.'){ ans[idx] = 'X'; } else{ if(ans[idx] != 'X'){ ans[idx] = '?'; } } } bool solve(int i1, int i2){ //cout << i1 << " " << i2 << endl; if(i1 == n){ if(i2 == c.size()){ return 1; } return 0; } if(dp[i1][i2].second){ return dp[i1][i2].first; } dp[i1][i2].second = true; dp[i1][i2].first = false; //cout << i1 << " " << i2 << endl; if(s[i1] == '.' || s[i1] == '_'){ bool b = solve(i1 + 1, i2); if(b){ make_zero(i1); dp[i1][i2].first = true; } } if(a[i1] >= c[i2] && (i1 + c[i2] == n || s[i1 + c[i2]] != 'X')){ bool b; if(i1 + c[i2] == n){ b = solve(i1 + c[i2], i2 + 1); if(b){ dp[i1][i2].first = true; v[i1]++; v[i1 + c[i2]]--; } } else{ b = solve(i1 + c[i2] + 1, i2 + 1); if(b){ make_zero(i1 + c[i2]); dp[i1][i2].first = true; v[i1]++; v[i1 + c[i2]]--; } } } return dp[i1][i2].first; } string solve_puzzle(string _s, vector<int> _c){ n = _s.size(); s = _s; for(int i = 0; i < (int)_c.size(); i++){ c.push_back(_c[i]); } if(s[n - 1] == 'X' || s[n - 1] == '.'){ a[n - 1] = 1; } else{ a[n - 1] = 0; } for(int i = n - 2; i >= 0; i--){ if(s[i] == 'X' || s[i] == '.'){ a[i] = a[i + 1] + 1; } else{ a[i] = 0; } } //for(int i = 0; i < n; i++){ // cout << a[i] << " "; //} //cout << endl; ans = s; solve(0, 0); int curr = 0; for(int i = 0; i < n; i++){ curr += v[i]; if(curr > 0){ make_x(i); } } return ans; } /*int main(){ string _s; vector<int> _c; int k; cin >> _s; cin >> k; for(int i = 0; i < k; i++){ int x; cin >> x; _c.push_back(x); } cout << solve_puzzle(_s, _c) << endl; return 0; }*/ /* .......... 2 3 4 */

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

paint.cpp: In function 'bool solve(int, int)':
paint.cpp:40:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(i2 == 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...