Submission #591964

#TimeUsernameProblemLanguageResultExecution timeMemory
591964VanillaPaint By Numbers (IOI16_paint)C++17
80 / 100
13 ms2772 KiB
#include <bits/stdc++.h>
#include "paint.h"
using namespace std;
const int maxn = 102;
bool dp[maxn][maxn][maxn]; // dp[i][j][k] -> is it possible to form an answer considering first i characters, first j blocks, and i being the k-th X of the j-th block

string solve_puzzle(string s, vector<int> c) {
    int n = s.size();
    int k = c.size();
    s.push_back('_');
    c.push_back(0);
    auto check = [&] () {
        memset(dp, 0, sizeof(dp));
        dp[0][0][0] = 1;
        for (int i = 1; i <= n + 1; i++){
            for (int j = 0; j <= k; j++){
                for (int ps = 0; ps <= c[j]; ps++){
                    char now = s[i-1];
                    if ((now == 'X' || now == '.') && ps) {
                        dp[i][j][ps] |= dp[i-1][j][ps - 1];
                    }
                    if ((now == '_' || now == '.') && !ps) {
                        if (j) dp[i][j][0]|=dp[i-1][j-1][c[j-1]];
                        dp[i][j][0]|=dp[i-1][j][0];
                    }
                    // if (dp[i][j][ps]) cout << i << " " << j << " " << ps << "\n";
                }
            }
        }
        return dp[n + 1][k][0];
    };
    string rs(n, '.');
    for (int i = 0; i < n; i++){
        if (s[i] != '.') rs[i]=s[i];
        else {
            s[i] = 'X';
            bool p1 = check();
            s[i] = '_';
            bool p2 = check();
            // cout << i << " " << p1 << " " << p2 << "\n";
            if (p1 && p2) rs[i]='?';
            else if (p1) rs[i]='X';
            else if (p2) rs[i]='_';
            s[i] = '.';
        }
    }
    return rs;
}

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