Submission #1326306

#TimeUsernameProblemLanguageResultExecution timeMemory
1326306AMnuPaint By Numbers (IOI16_paint)C++20
100 / 100
102 ms8428 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; const int MAXN = 2e5+5, MAXK = 1e2+5; int N, K, last, da[MAXN]; string ans; bitset <MAXK> pre[MAXN], suf[MAXN]; string solve_puzzle(string s,vector<int> c) { N = s.size()+1; K = c.size(); s = "__"+s+"__"; suf[N+1][K] = 1; suf[N+2][K] = 1; last = N+1; for (int i=N;i>1;i--) { if (s[i] != 'X') { suf[i] = suf[i+1]; } if (s[i] != '_') { for (int j=0;j<K;j++) { if (i+c[j] <= last && s[i+c[j]] != 'X' && suf[i+c[j]+1][j+1]) { suf[i][j] = 1; } } } else { last = i; } } pre[0][0] = 1; pre[1][0] = 1; last = 1; for (int i=2;i<=N;i++) { if (s[i] != 'X') { pre[i] = pre[i-1]; } if (s[i] != '_') { for (int j=0;j<K;j++) { if (i-c[j] >= last && s[i-c[j]] != 'X' && pre[i-c[j]-1][j]) { pre[i][j+1] = 1; if (s[i+1] != 'X' && suf[i+2][j+1]) { da[i-c[j]]++; da[i]--; } } } } else { last = i; } if (s[i] != 'X' && (pre[i-1]&suf[i+1]).any()) { ans += '?'; } else { ans += 'X'; } } for (int i=1;i<N;i++) { da[i] += da[i-1]; if (!da[i]) { ans[i-1] = '_'; } } return ans; }

Compilation message (stderr)

paint.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
paint_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...