Submission #889077

#TimeUsernameProblemLanguageResultExecution timeMemory
889077StefanL2005Paint By Numbers (IOI16_paint)C++14
59 / 100
1 ms600 KiB
#include <bits/stdc++.h> using namespace std; ifstream in("file.in"); void rewrite(int poz, int last, char c, string &s) { for (int i = poz - last + 1; i <= poz; i++) s[i] = c; } string solve_puzzle(string s, vector<int> c) { int n = s.length(), k = c.size(); string ans; vector<pair<int,int>> range(k); ans.assign(n, '_'); int l = 0, poz = 0; //left range (min range) for (int i = 0; i < n && poz < k; i++) { if (s[i] == '_') l = 0; else l++; if (l == c[poz]) { range[poz].first = i + 1 - l; l = 0; i++; poz++; } } //right range (max range) l = 0; poz = k - 1; for (int i = n - 1; i >= 0 && poz >= 0; i--) { if (s[i] == '_') l = 0; else l++; if (l == c[poz]) { range[poz].second = i + l - 1; l = 0; i--; poz--; } } for (int i = 0; i < k; i++) { l = 0; for (int j = range[i].first; j <= range[i].second; j++) { if (s[j] == '_') { if (l < c[i]) rewrite(j, l, '_', ans); l = 0; continue; } l++; if (l == c[i]) rewrite(j, l, '?', ans); if (l > c[i]) ans[j] = '?'; } int same = c[i] - (range[i].second - range[i].first + 1 - c[i]); for (int j = range[i].first + c[i] - 1; j >= range[i].first; j--) { if (same <= 0) break; ans[j] = 'X'; same--; } } 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...