Submission #1197559

#TimeUsernameProblemLanguageResultExecution timeMemory
1197559YassirSalamaPaint By Numbers (IOI16_paint)C++20
7 / 100
1 ms1096 KiB
#include "paint.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#ifdef IOI
template<typename T> 
void dbg(const T& t){
    cout<<t<<endl;
}
template<typename T,typename... Args>
void dbg(const T& t,const Args&... args){
    cout<<t<<" , ";
    dbg(args...);
}
#define dbg(...) cout<<'('<<#__VA_ARGS__<<") : ";dbg(__VA_ARGS__);
#else
#define dbg(...) 1337;
#endif
string s;
vector<int> c;
int n,k;
const int maxn = 2e5+100;
int dp[maxn][101][2];// 0 being black
int dp2[maxn][101][2];
int pref[maxn];
int sum(int l,int r){
    return pref[r]-pref[l];
}
string solve_puzzle(string ss, vector<int> cc) {s=ss;c=cc;n = s.length();k = c.size();
    memset(pref,0,sizeof(pref));
    for(int i  =0;i<n;i++){
        pref[i+1] = pref[i];
        pref[i+1] += (s[i]=='_');
    }
    dp[0][0][0]=1;
    for(int i = 0;i<n;i++){
        for(int j = 0;j<=k;j++){
            if(s[i]!='X'){
                dp[i+1][j][0]|=dp[i][j][0];
                dp[i+1][j][0]|=dp[i][j][1];
            }
            if(j+1<=k&&i+c[i]<=n&&sum(i,i+c[j])==0)
                dp[i+c[j]][j+1][1]|=(dp[i][j][0]);
        }
    }
    #define all(s) s.begin(),s.end()
    reverse(all(s));
    memset(pref,0,sizeof(pref));
    for(int i = 0;i<n;i++){
        pref[i+1]=pref[i];
        pref[i+1] += (s[i]=='_');
    }
    dp2[0][0][0]=1;
    for(int i = 0;i<n;i++){
        for(int j = 0;j<=k;j++){
            if(s[i]!='X'){
                dp2[i+1][j][0]|=dp2[i][j][0];
                dp2[i+1][j][0]|=dp2[i][j][1];
            }
            if(j+1<=k&&i+c[k-j-1]<=n&&sum(i,i+c[k-1-j])==0)
                dp2[i+c[k-1-j]][j+1][1]|=(dp2[i][j][0]);
        }
    }
    string ans(n,'?');
    int mx = 0;
    auto f = [&](int i){
        return n-i+1;
    };
    for(int i=1;i<=n;i++){
        bool w = 0;
        bool b = 0;
        for(int j=0;j<=k;j++){
            w|=(dp[i][j][0]&dp2[f(i)][k-j][0]);
            if(j+1<=k&&dp[i-1][j][0]&&dp2[f(i)][k-j][1]){
                mx = max(mx,i+c[j]);
            }
        }
        b|=(i<mx);
        if(!b&&w){
            ans[i-1] = '_';
            continue;
        }
        if(!w&&b){
            ans[i-1]='X';
            continue;
        }
        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...