제출 #622408

#제출 시각아이디문제언어결과실행 시간메모리
622408LucppPaint By Numbers (IOI16_paint)C++17
80 / 100
2052 ms880 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; int n, k; string s; vector<int> c; bool canSolve(){ vector<vector<bool>> dp(n+1, vector<bool>(k+1, false)); dp[0][0] = true; for(int i = 0; i < n; i++){ if(s[i] == 'X') break; dp[i+1][0] = true; } int last_ = -1; for(int i = 0; i < n; i++){ if(s[i] == '_') last_ = i; for(int j = 0; j < k; j++){ int start = i+1-c[j]; if(start > last_){ if(start > 0) dp[i+1][j+1] = dp[start-1][j] && s[start-1] != 'X'; else if(j == 0) dp[i+1][j+1] = true; } if(s[i] != 'X') dp[i+1][j+1] = dp[i+1][j+1] || dp[i][j+1]; } } return dp[n][k]; } string solve_puzzle(string S, vector<int> C){ s = S; c = C; n = (int)S.size(); k = (int)C.size(); string ans(n, ' '); for(int i = 0; i < n; i++){ if(s[i] != '.') ans[i] = s[i]; else{ s[i] = '_'; bool w = canSolve(); s[i] = 'X'; bool b = canSolve(); s[i] = '.'; if(w && b) ans[i] = '?'; else ans[i] = w?'_':'X'; } } return ans; }
#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...