제출 #427233

#제출 시각아이디문제언어결과실행 시간메모리
427233vincentpikachu20Paint By Numbers (IOI16_paint)C++17
59 / 100
1 ms204 KiB
#include "paint.h" #include <bits/stdc++.h> #define int long long using namespace std; string solve_puzzle(string s, vector<signed> c) { int n = s.size(), k = c.size(); string ans = s; vector<int> l(k),r(k); //put all to the lefts int p = 0; for(int i = 0; i < k; i ++){ bool okay; do{ okay = true; int mine = 0; for(int j = p; j < p + c[i]; j ++){ if(s[j] == '_'){ okay = false; mine = j; break; } } if(okay){ l[i] = p; p += c[i] + 1; } else p = mine + 1; }while(!okay); } //put all to the rights p = n; for(int i = k-1; i >= 0; i --){ bool okay; do{ okay = true; int mine = 0; for(int j = p-1; j >= p-c[i]; j --){ if(s[j] == '_'){ okay = false; mine = j; break; } } if(okay){ r[i] = p - c[i]; p -= c[i] + 1; } else p = mine; }while(!okay); } //apply x's for(int i = 0; i < k; i ++){ for(int j = l[i]; j < r[i] + c[i]; j ++) ans[j] = (ans[j] == '.' ? '?' : ans[j]); for(int j = r[i]; j < l[i] + c[i]; j ++) ans[j] = 'X'; } for(char &v : ans) if(v == '.') v = '_'; 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...