Submission #582756

#TimeUsernameProblemLanguageResultExecution timeMemory
582756MadokaMagicaFanPaint By Numbers (IOI16_paint)C++14
59 / 100
1 ms212 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using vi = vector<int>; using pi = pair<int,int>; #define all(v) v.begin(),v.end() #define sort(v) sort(all(v)) #define endl '\n' #define forn(i,n) for(int i = 0; i < n; ++i) #define forbe(i,b,e) for(int i = b; i < e; ++i) #define forr(i,n) for(int i = n-1; i >= 0; --i) #define sz(v) ((int)v.size()) #define pb push_back #define f first #define s second struct aib{ vi f; int n; aib(int _n) { n = _n; f.assign(n,0); } void add(int x, int v) { for(;x <n; x |= (x+1)) f[x] += v; } int q(int x) { int r = 0; for(;x >= 0; x = (x&(x+1))-1) r += f[x]; return r; } int query(int l, int r) { return q(r) - q(l-1); } }; string solve_puzzle(string s, vi c) { int n = sz(s); int k = sz(c); string ans = s; vi type(n,0); vi pnt(k,0); aib tr(n); aib posseg(n+5); aib minseg(n+5); forn(i,n) if (s[i] == '_') tr.add(i,1); int j = 0; forn(i,n) { if (j == k) break; if (tr.query(i,i+c[j]-1) > 0) continue; forn(l,c[j]) type[i+l] = 1; pnt[j] = i; i = i + c[j]; ++j; continue; } assert(j == k); forn(j,k) { minseg.add(pnt[j]+c[j],1); if (j < k-1) minseg.add(pnt[j+1],-1); else minseg.add(n,-1); } int lm; int lp = n+1; forr(j,k) { lm = lp; lp = pnt[j]; forbe(i,pnt[j], lm - c[j]) { // cout << i << ' ' << i + c[j] << ' ' << tr.query(i,i+c[j]) << endl; if (tr.query(i,i+c[j]-1) > 0) continue; // cout << j << ' ' << i << ' ' << n << endl; lp = i; posseg.add(i,1); posseg.add(i+c[j],-1); } minseg.add(pnt[j],1); minseg.add(lp,-1); // cout << pnt[j] << ' ' << lp << endl; } forn(i,n) { if (posseg.q(i) > 0) { if (minseg.q(i) > 0) ans[i] = '?'; else ans[i] = 'X'; } else ans[i] = '_'; } return ans; } #ifdef ONPC void solve() { int n, k; cin >> k; string s; cin >> s; vi c(k); forn(i,k) cin >> c[i]; string ans = solve_puzzle(s,c); cout << ans << endl; } int main() { freopen("in", "r", stdin); // ios_base::sync_with_stdio(0);cin.tie(0); solve(); } #endif
#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...