Submission #1162562

#TimeUsernameProblemLanguageResultExecution timeMemory
1162562AlgorithmWarriorPaint By Numbers (IOI16_paint)C++20
100 / 100
432 ms125344 KiB
#include <bits/stdc++.h> #include "paint.h" using namespace std; int const MAXN=2e5+5; int const MAXK=105; int lines[MAXN]; bool okpref[MAXN][MAXK]; bool oksuf[MAXN][MAXK]; int okX[MAXN][MAXK]; bool canbe_(char ch){ return ch=='_' || ch=='.'; } bool canbeX(char ch){ return ch=='X' || ch=='.'; } string solve_puzzle(string s,vector<int>c) { int i,j; int n=s.size(); int k=c.size(); for(i=1;i<=n;++i){ if(s[i-1]=='_') lines[i]=1; lines[i]+=lines[i-1]; } okpref[0][0]=1; for(i=1;i<=n;++i){ okpref[i][0]=(okpref[i-1][0] && canbe_(s[i-1])); for(j=1;j<=k;++j){ bool condition1=(canbe_(s[i-1]) && okpref[i-1][j]); bool condition2=0; if(i>=c[j-1]) condition2=(lines[i]==lines[i-c[j-1]] && ((i-c[j-1]==0)?(j==1):(canbe_(s[i-c[j-1]-1]) && okpref[i-c[j-1]-1][j-1]))); okpref[i][j]=(condition1 || condition2); } } oksuf[n+1][k+1]=1; for(i=n;i;--i){ oksuf[i][k+1]=(oksuf[i+1][k+1] && canbe_(s[i-1])); for(j=1;j<=k;++j){ bool condition1=(canbe_(s[i-1]) && oksuf[i+1][j]); bool condition2=0; if(i+c[j-1]-1<=n) condition2=(lines[i+c[j-1]-1]==lines[i-1] && ((i+c[j-1]-1==n)?(j==k):(canbe_(s[i+c[j-1]-1]) && oksuf[i+c[j-1]+1][j+1]))); oksuf[i][j]=(condition1 || condition2); } } for(i=1;i<=n;++i) for(j=1;j<=k;++j) if(i>=c[j-1]) okX[i][j]=(lines[i]==lines[i-c[j-1]] && ((i-c[j-1]==0)?(j==1):(canbe_(s[i-c[j-1]-1]) && okpref[i-c[j-1]-1][j-1])) && ((i==n)?(j==k):(canbe_(s[i]) && oksuf[i+2][j+1]))); for(j=1;j<=k;++j) for(i=1;i<=n;++i) okX[i][j]+=okX[i-1][j]; string rasp; for(i=0;i<n;++i){ if(s[i]!='.'){ rasp.push_back(s[i]); continue; } bool hasSol_=0; for(j=0;j<=k;++j) hasSol_|=(okpref[i][j] && oksuf[i+2][j+1]); bool hasSolX=0; for(j=1;j<=k;++j){ int last=min(i+c[j-1],n); hasSolX|=(okX[last][j]!=okX[i][j]); } if(hasSol_ && hasSolX) rasp.push_back('?'); else if(hasSol_) rasp.push_back('_'); else rasp.push_back('X'); } return rasp; }

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