Submission #761126

#TimeUsernameProblemLanguageResultExecution timeMemory
761126raysh07Paint By Numbers (IOI16_paint)C++17
Compilation error
0 ms0 KiB
//#include "paint.h"
#include <bits/stdc++.h>
using namespace std;

int n, k;
const int N = 2e5 + 69;
const int K = 102;
bool dp1[N][K][2];
bool dp2[N][K][2];
int p[N];
bool b1[N], b2[N];

string solve_puzzle(string s, vector<int> c) {
    n = s.length();
    k = c.size();
    s = "0" + s;
    
    for (int i = 1; i <= n; i++){
        p[i] = p[i - 1];
        if (s[i] == '_') p[i]++;
    }
    
    c.push_back(0);
    for (int i = k; i > 0; i--) c[i] = c[i - 1];
    
    dp1[0][0][0] = true;
    for (int i = 1; i <= n; i++){
        if (s[i] != 'X'){
            for (int j = 0; j <= k; j++){
                dp1[i][j][0] |= dp1[i - 1][j][0] | dp1[i - 1][j][1];
            }
        }
        for (int j = 1; j <= k; j++){
            if (i >= c[j] && p[i] == p[i - c[j]]){
                dp1[i][j][1] |= dp1[i - c[j]][j - 1][0];
            }
        }
        
        // cout << i << "\t";
        // for (int j = 0; j <= k; j++){
        //     cout << dp1[i][j][0] << " " << dp1[i][j][1] << "\t";
        // }
        // cout << "\n";
    }
    
    dp2[n + 1][k + 1][0] = true;
    for (int i = n; i >= 1; i--){
        if (s[i] != 'X'){
            for (int j = 1; j <= k + 1; j++){
                dp2[i][j][0] |= dp2[i + 1][j][0] | dp2[i + 1][j][1];
            }
        }
        for (int j = 1; j <= k; j++){
            if (i + c[j] <= n + 1 && p[i - 1] == p[i + c[j] - 1]){
                dp2[i][j][1] |= dp2[i + c[j]][j + 1][0];
            }
        }
    }
    
    string ans = "";
    
    for (int i = 1; i <= n; i++){
        for (int j = 0; j <= k; j++){
            if (dp1[i][j][0] && dp2[i][j + 1][0]){
                b1[i] = true;
            }
        }
        
        for (int j = 1; j <= k; j++){
            for (int finish = i; finish <= min(n, i + c[j] - 1); finish++){
                if (dp1[finish][j][1] && dp2[finish + 1][j + 1][0]) b2[i] = true;
            }
        }
        
        if (b1[i] && b2[i]) ans += '?';
        else if (b1[i]) ans += '_';
        else ans += 'X';
    }
    
    return ans;
}

int main(){
    string s; cin >> s;
    int m; cin >> m;
    vector <int> a(m);
    for (auto &x : a) cin >> x;
    
    cout << solve_puzzle(s, a);
    return 0;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/cctzrM71.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccLlc26Z.o:paint.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status