Submission #1269831

#TimeUsernameProblemLanguageResultExecution timeMemory
1269831kl0989ePaint By Numbers (IOI16_paint)C++20
100 / 100
294 ms173996 KiB
#include "paint.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pi pair<int, int> #define pl pair<ll, ll> #define vi vector<int> #define vl vector<ll> #define fi first #define se second #define pb push_back #define all(x) (x).begin(),(x).end() string solve_puzzle(string s, vi c) { int n=s.size(); int k=c.size(); for (int i=0; i<n; i++) { if (s[i]=='.') { s[i]='?'; } } vector<vi> dp(n+1,vi(k+1,0)); vi cnt(n+1,0); for (int i=0; i<n; i++) { cnt[i+1]=cnt[i]+(s[i]=='_'); } dp[0][0]=1; for (int i=1; i<=n; i++) { for (int j=0; j<=k; j++) { if (s[i-1]!='X') { dp[i][j]|=dp[i-1][j]; } if (j>0 && c[j-1]<=i && cnt[i]-cnt[i-c[j-1]]==0 && (i-c[j-1]-1<0 || s[i-c[j-1]-1]!='X')) { dp[i][j]|=(dp[max(i-c[j-1]-1,0)][j-1]); } } } reverse(all(s)); reverse(all(c)); for (int i=0; i<n; i++) { cnt[i+1]=cnt[i]+(s[i]=='_'); } vector<vi> dp1(n+1,vi(k+1,0)); dp1[0][0]=1; for (int i=1; i<=n; i++) { for (int j=0; j<=k; j++) { if (s[i-1]!='X') { dp1[i][j]|=dp1[i-1][j]; } if (j>0 && c[j-1]<=i && cnt[i]-cnt[i-c[j-1]]==0 && (i-c[j-1]-1<0 || s[i-c[j-1]-1]!='X')) { dp1[i][j]|=(dp1[max(i-c[j-1]-1,0)][j-1]); } } } reverse(all(s)); reverse(all(c)); for (int i=0; i<n; i++) { cnt[i+1]=cnt[i]+(s[i]=='_'); } int mx=-1; for (int i=0; i<n; i++) { for (int j=0; j<k; j++) { if (s[i]!='_' && i+c[j]<=n && cnt[i+c[j]]-cnt[i]==0) { if ((i==0 && j==0) || (i!=0 && s[i-1]!='X' && dp[i-1][j])) { if ((i+c[j]==n && j==k-1) || (i+c[j]!=n && s[i+c[j]]!='X' && dp1[n-i-c[j]-1][k-j-1])) { mx=max(mx,i+c[j]-1); } } } } if (s[i]!='?') { continue; } bool a=0,b=0; for (int j=0; j<=k; j++) { a|=dp[i][j]&dp1[n-i-1][k-j]; } b=i<=mx; if (a && b) { s[i]='?'; } else if (a) { s[i]='_'; } else if (b) { s[i]='X'; } } return s; }

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...