Submission #380404

# Submission time Handle Problem Language Result Execution time Memory
380404 2021-03-21T15:41:55 Z DystoriaX Paint By Numbers (IOI16_paint) C++14
32 / 100
1 ms 492 KB
#include "paint.h"

#include <cstdlib>
#include <vector>
#include <bitset>
#include <iostream>

using namespace std;

int n, k;
int pref[200010], lastBlack;

bitset<200010> dp[110];
string ans;

string solve_puzzle(string s, std::vector<int> c) {
    lastBlack = -1;

    int n = s.size();

    ans = s;
    s = "." + s;

    for(int i = 1; i <= n; i++) {
        pref[i] = pref[i - 1] + (s[i] == '_');

        if(s[i] == 'X') lastBlack = i;
    }

    k = c.size();

    for(int j = k - 1; j >= 0; j--){
        for(int i = 1; i <= n - c[j] + 1; i++) {
            if(s[i] == '_') dp[j][i] = false;
            if(s[i - 1] == 'X') dp[j][i] = false;
            
            // if(j == 1 && i == 7) cerr << pref[i + c[j] - 1] - pref[i - 1] << " " << s[i + c[j]] << " " << dp[j + 1][i + c[j] + 1] << "\n";
            if(pref[i + c[j] - 1] - pref[i - 1] == 0 && (i == n - c[j] + 1 || s[i + c[j]] != 'X')) {
                if(j == k - 1) dp[j][i] = lastBlack <= i + c[j] - 1;
                else dp[j][i] = dp[j + 1][i + c[j] + 1];
            }
        }
    }

    int first = 1;

    for(int j = 0; j < k; j++){
        for(int i = 1; i <= n; i++) pref[i] = 0;
        int ct = 0;

        int nxt = -1;
        for(int i = first; i <= n - c[j] + 1; i++) {
            if(j == 0 && s[i - 1] == 'X') break;

            if(dp[j][i]) pref[i]++, pref[i + c[j]]--, ct++;
            if(dp[j][i] && nxt == -1) nxt = i;

            // cerr << j << " " << i << ": " << dp[j][i] << "\n";
        }

        for(int i = 1; i <= n; i++) pref[i] += pref[i - 1];

        for(int i = first; i <= n; i++){
            if(pref[i] == ct) ans[i - 1] = 'X';
            else if (pref[i] > 0) ans[i - 1] = '?';
            else ans[i - 1] = '_'; 

            // if(j == 0) cerr << i << ": " << pref[i] << "\n";
        }

        first = nxt + c[j] + 1;
    }

    for(int i = 0; i < n; i++) if(ans[i] == '.') ans[i] = '_';
    
    return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 13, m = 1
2 Correct 1 ms 364 KB n = 18, m = 1
3 Correct 1 ms 364 KB n = 17, m = 1
4 Correct 1 ms 364 KB n = 1, m = 1
5 Correct 1 ms 364 KB n = 20, m = 1
6 Correct 1 ms 364 KB n = 20, m = 1
7 Correct 1 ms 364 KB n = 20, m = 1
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 13, m = 1
2 Correct 1 ms 364 KB n = 18, m = 1
3 Correct 1 ms 364 KB n = 17, m = 1
4 Correct 1 ms 364 KB n = 1, m = 1
5 Correct 1 ms 364 KB n = 20, m = 1
6 Correct 1 ms 364 KB n = 20, m = 1
7 Correct 1 ms 364 KB n = 20, m = 1
8 Correct 1 ms 364 KB n = 20, m = 5
9 Correct 1 ms 364 KB n = 18, m = 3
10 Correct 1 ms 364 KB n = 17, m = 2
11 Correct 1 ms 364 KB n = 20, m = 2
12 Correct 1 ms 364 KB n = 17, m = 4
13 Correct 1 ms 384 KB n = 17, m = 6
14 Correct 1 ms 364 KB n = 17, m = 1
15 Correct 1 ms 364 KB n = 17, m = 4
16 Correct 1 ms 384 KB n = 13, m = 3
17 Correct 1 ms 364 KB n = 18, m = 4
18 Correct 1 ms 364 KB n = 20, m = 10
19 Correct 1 ms 384 KB n = 19, m = 10
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 13, m = 1
2 Correct 1 ms 364 KB n = 18, m = 1
3 Correct 1 ms 364 KB n = 17, m = 1
4 Correct 1 ms 364 KB n = 1, m = 1
5 Correct 1 ms 364 KB n = 20, m = 1
6 Correct 1 ms 364 KB n = 20, m = 1
7 Correct 1 ms 364 KB n = 20, m = 1
8 Correct 1 ms 364 KB n = 20, m = 5
9 Correct 1 ms 364 KB n = 18, m = 3
10 Correct 1 ms 364 KB n = 17, m = 2
11 Correct 1 ms 364 KB n = 20, m = 2
12 Correct 1 ms 364 KB n = 17, m = 4
13 Correct 1 ms 384 KB n = 17, m = 6
14 Correct 1 ms 364 KB n = 17, m = 1
15 Correct 1 ms 364 KB n = 17, m = 4
16 Correct 1 ms 384 KB n = 13, m = 3
17 Correct 1 ms 364 KB n = 18, m = 4
18 Correct 1 ms 364 KB n = 20, m = 10
19 Correct 1 ms 384 KB n = 19, m = 10
20 Correct 1 ms 492 KB n = 100, m = 5
21 Correct 1 ms 364 KB n = 90, m = 3
22 Correct 1 ms 364 KB n = 86, m = 2
23 Correct 1 ms 364 KB n = 81, m = 4
24 Correct 1 ms 364 KB n = 89, m = 10
25 Correct 1 ms 364 KB n = 81, m = 23
26 Correct 1 ms 364 KB n = 86, m = 8
27 Correct 1 ms 364 KB n = 53, m = 22
28 Correct 1 ms 492 KB n = 89, m = 35
29 Correct 1 ms 492 KB n = 63, m = 25
30 Correct 1 ms 492 KB n = 100, m = 50
31 Correct 1 ms 492 KB n = 99, m = 50
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 13, m = 1
2 Correct 1 ms 364 KB n = 18, m = 1
3 Correct 1 ms 364 KB n = 17, m = 1
4 Correct 1 ms 364 KB n = 1, m = 1
5 Correct 1 ms 364 KB n = 20, m = 1
6 Correct 1 ms 364 KB n = 20, m = 1
7 Correct 1 ms 364 KB n = 20, m = 1
8 Correct 1 ms 364 KB n = 20, m = 5
9 Correct 1 ms 364 KB n = 18, m = 3
10 Correct 1 ms 364 KB n = 17, m = 2
11 Correct 1 ms 364 KB n = 20, m = 2
12 Correct 1 ms 364 KB n = 17, m = 4
13 Correct 1 ms 384 KB n = 17, m = 6
14 Correct 1 ms 364 KB n = 17, m = 1
15 Correct 1 ms 364 KB n = 17, m = 4
16 Correct 1 ms 384 KB n = 13, m = 3
17 Correct 1 ms 364 KB n = 18, m = 4
18 Correct 1 ms 364 KB n = 20, m = 10
19 Correct 1 ms 384 KB n = 19, m = 10
20 Correct 1 ms 492 KB n = 100, m = 5
21 Correct 1 ms 364 KB n = 90, m = 3
22 Correct 1 ms 364 KB n = 86, m = 2
23 Correct 1 ms 364 KB n = 81, m = 4
24 Correct 1 ms 364 KB n = 89, m = 10
25 Correct 1 ms 364 KB n = 81, m = 23
26 Correct 1 ms 364 KB n = 86, m = 8
27 Correct 1 ms 364 KB n = 53, m = 22
28 Correct 1 ms 492 KB n = 89, m = 35
29 Correct 1 ms 492 KB n = 63, m = 25
30 Correct 1 ms 492 KB n = 100, m = 50
31 Correct 1 ms 492 KB n = 99, m = 50
32 Incorrect 1 ms 364 KB char #0 differ - expected: '?', found: '_'
33 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 13, m = 1
2 Correct 1 ms 364 KB n = 18, m = 1
3 Correct 1 ms 364 KB n = 17, m = 1
4 Correct 1 ms 364 KB n = 1, m = 1
5 Correct 1 ms 364 KB n = 20, m = 1
6 Correct 1 ms 364 KB n = 20, m = 1
7 Correct 1 ms 364 KB n = 20, m = 1
8 Correct 1 ms 364 KB n = 20, m = 5
9 Correct 1 ms 364 KB n = 18, m = 3
10 Correct 1 ms 364 KB n = 17, m = 2
11 Correct 1 ms 364 KB n = 20, m = 2
12 Correct 1 ms 364 KB n = 17, m = 4
13 Correct 1 ms 384 KB n = 17, m = 6
14 Correct 1 ms 364 KB n = 17, m = 1
15 Correct 1 ms 364 KB n = 17, m = 4
16 Correct 1 ms 384 KB n = 13, m = 3
17 Correct 1 ms 364 KB n = 18, m = 4
18 Correct 1 ms 364 KB n = 20, m = 10
19 Correct 1 ms 384 KB n = 19, m = 10
20 Correct 1 ms 492 KB n = 100, m = 5
21 Correct 1 ms 364 KB n = 90, m = 3
22 Correct 1 ms 364 KB n = 86, m = 2
23 Correct 1 ms 364 KB n = 81, m = 4
24 Correct 1 ms 364 KB n = 89, m = 10
25 Correct 1 ms 364 KB n = 81, m = 23
26 Correct 1 ms 364 KB n = 86, m = 8
27 Correct 1 ms 364 KB n = 53, m = 22
28 Correct 1 ms 492 KB n = 89, m = 35
29 Correct 1 ms 492 KB n = 63, m = 25
30 Correct 1 ms 492 KB n = 100, m = 50
31 Correct 1 ms 492 KB n = 99, m = 50
32 Incorrect 1 ms 364 KB char #0 differ - expected: '?', found: '_'
33 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 13, m = 1
2 Correct 1 ms 364 KB n = 18, m = 1
3 Correct 1 ms 364 KB n = 17, m = 1
4 Correct 1 ms 364 KB n = 1, m = 1
5 Correct 1 ms 364 KB n = 20, m = 1
6 Correct 1 ms 364 KB n = 20, m = 1
7 Correct 1 ms 364 KB n = 20, m = 1
8 Correct 1 ms 364 KB n = 20, m = 5
9 Correct 1 ms 364 KB n = 18, m = 3
10 Correct 1 ms 364 KB n = 17, m = 2
11 Correct 1 ms 364 KB n = 20, m = 2
12 Correct 1 ms 364 KB n = 17, m = 4
13 Correct 1 ms 384 KB n = 17, m = 6
14 Correct 1 ms 364 KB n = 17, m = 1
15 Correct 1 ms 364 KB n = 17, m = 4
16 Correct 1 ms 384 KB n = 13, m = 3
17 Correct 1 ms 364 KB n = 18, m = 4
18 Correct 1 ms 364 KB n = 20, m = 10
19 Correct 1 ms 384 KB n = 19, m = 10
20 Correct 1 ms 492 KB n = 100, m = 5
21 Correct 1 ms 364 KB n = 90, m = 3
22 Correct 1 ms 364 KB n = 86, m = 2
23 Correct 1 ms 364 KB n = 81, m = 4
24 Correct 1 ms 364 KB n = 89, m = 10
25 Correct 1 ms 364 KB n = 81, m = 23
26 Correct 1 ms 364 KB n = 86, m = 8
27 Correct 1 ms 364 KB n = 53, m = 22
28 Correct 1 ms 492 KB n = 89, m = 35
29 Correct 1 ms 492 KB n = 63, m = 25
30 Correct 1 ms 492 KB n = 100, m = 50
31 Correct 1 ms 492 KB n = 99, m = 50
32 Incorrect 1 ms 364 KB char #0 differ - expected: '?', found: '_'
33 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 13, m = 1
2 Correct 1 ms 364 KB n = 18, m = 1
3 Correct 1 ms 364 KB n = 17, m = 1
4 Correct 1 ms 364 KB n = 1, m = 1
5 Correct 1 ms 364 KB n = 20, m = 1
6 Correct 1 ms 364 KB n = 20, m = 1
7 Correct 1 ms 364 KB n = 20, m = 1
8 Correct 1 ms 364 KB n = 20, m = 5
9 Correct 1 ms 364 KB n = 18, m = 3
10 Correct 1 ms 364 KB n = 17, m = 2
11 Correct 1 ms 364 KB n = 20, m = 2
12 Correct 1 ms 364 KB n = 17, m = 4
13 Correct 1 ms 384 KB n = 17, m = 6
14 Correct 1 ms 364 KB n = 17, m = 1
15 Correct 1 ms 364 KB n = 17, m = 4
16 Correct 1 ms 384 KB n = 13, m = 3
17 Correct 1 ms 364 KB n = 18, m = 4
18 Correct 1 ms 364 KB n = 20, m = 10
19 Correct 1 ms 384 KB n = 19, m = 10
20 Correct 1 ms 492 KB n = 100, m = 5
21 Correct 1 ms 364 KB n = 90, m = 3
22 Correct 1 ms 364 KB n = 86, m = 2
23 Correct 1 ms 364 KB n = 81, m = 4
24 Correct 1 ms 364 KB n = 89, m = 10
25 Correct 1 ms 364 KB n = 81, m = 23
26 Correct 1 ms 364 KB n = 86, m = 8
27 Correct 1 ms 364 KB n = 53, m = 22
28 Correct 1 ms 492 KB n = 89, m = 35
29 Correct 1 ms 492 KB n = 63, m = 25
30 Correct 1 ms 492 KB n = 100, m = 50
31 Correct 1 ms 492 KB n = 99, m = 50
32 Incorrect 1 ms 364 KB char #0 differ - expected: '?', found: '_'
33 Halted 0 ms 0 KB -