제출 #1222860

#제출 시각아이디문제언어결과실행 시간메모리
1222860fermatPaint By Numbers (IOI16_paint)C++20
컴파일 에러
0 ms0 KiB
string solve_puzzle(string s, vector<int> c) { c.insert(c.begin(), 0);
    n = s.size(); k = c.size() - 1;
    s = ' ' + s;
    pref[0][0] = 1;
    for (int i = 1; i <= n; i++) {
        cnt[i] = cnt[i - 1] + (s[i] == '_');
    }
    for (int i = 1; i <= n; i++) {
        if (s[i] == '_') {
            for (int j = 0; j <= k; j++) {
                pref[i][j] = pref[i - 1][j];
            }
        } else if (s[i] == 'X') {
            for (int j = 1; j <= k; j++) {
                if (i >= c[j] && cnt[i] - cnt[i - c[j]] == 0) {
                    if (j == 1) {
                        pref[i][j] = pref[i - c[j]][j - 1];
                    } else if (i >= c[j] + 1 && s[i - c[j]] != 'X') {
                        pref[i][j] = pref[i - c[j] - 1][j - 1];
                    }
                }
            }
        } else {
            for (int j = 0; j <= k; j++) {
                pref[i][j] = pref[i - 1][j];
                if (j > 0 && i >= c[j] && cnt[i] - cnt[i - c[j]] == 0) {
                    if (j == 1) {
                        pref[i][j] |= pref[i - c[j]][j - 1];
                    } else if (i >= c[j] + 1 && s[i - c[j]] != 'X') {
                        pref[i][j] |= pref[i - c[j] - 1][j - 1];
                    }
                }
            }
        }
    }
    suf[n + 1][0] = 1;
    for (int i = n; i >= 1; i--) {
        if (s[i] == '_') {
            for (int j = 0; j <= k; j++) {
                suf[i][j] = suf[i + 1][j];
            }
        } else if (s[i] == 'X') {
            for (int j = 1; j <= k; j++) {
                if (n - i + 1 >= c[k - j + 1] && cnt[i + c[k - j + 1] - 1] - cnt[i - 1] == 0) {
                    if (j == 1) {
                        suf[i][j] = suf[i + c[k - j + 1]][j - 1];
                    } else if (n - i + 1 >= c[k - j + 1] + 1 && s[i + c[k - j + 1]] != 'X') {
                        suf[i][j] = suf[i + c[k - j + 1] + 1][j - 1];
                    }
                }
            }
        } else {
            for (int j = 0; j <= k; j++) {
                suf[i][j] = suf[i + 1][j];
                if (j > 0 && n - i + 1 >= c[k - j + 1] && cnt[i + c[k - j + 1] - 1] - cnt[i - 1] == 0) {
                    if (j == 1) {
                        suf[i][j] |= suf[i + c[k - j + 1]][j - 1];
                    } else if (n - i + 1 >= c[k - j + 1] + 1 && s[i + c[k - j + 1]] != 'X') {
                        suf[i][j] |= suf[i + c[k - j + 1] + 1][j - 1];
                    }
                }
            }
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j <= k; j++) {
            if (pref[i - 1][j] && suf[i + 1][k - j]) {
                fl[i] = 1;
                break;
            }
        }
    }
    s += ' ';
    for (int i = 1; i <= n; i++) {
        if (s[i - 1] == 'X') continue;
        for (int j = 1; j <= k; j++) {
            if (i + c[j] - 1 > n || cnt[i + c[j] - 1] - cnt[i - 1] > 0 || s[i + c[j]] == 'X') continue;
            if (k == 1) {
                if (i + c[j] - 1 <= n && pref[i - 1][j - 1] && suf[i + c[j]][k - j]){
                    p[i]++; p[i + c[j]]--;
                }
            } else {
                if (j == 1 && i + c[j] <= n && pref[i - 1][j - 1] && suf[i + c[j] + 1][k - j]) {
                    p[i]++; p[i + c[j]]--;
                } else if (j == k && i >= 2 && i + c[j] - 1 <= n && pref[i - 2][j - 1] && suf[i + c[j]][k - j]) {
                    p[i]++; p[i + c[j]]--;
                } else if (j > 1 && j < k && i >= 2 && i + c[j] <= n && pref[i - 2][j - 1] && suf[i + c[j] + 1][k - j]) {
                    p[i]++; p[i + c[j]]--;
                }
            }
        }
    }
    for (int i = 1; i <= n; i++) {
        p[i] += p[i - 1];
        if (s[i] == 'X')
            ans += 'X';
        else if (s[i] == '_')
            ans += '_';
        else {
            if (fl[i] && p[i])
                ans += '?';
            else if (fl[i])
                ans += '_';
            else
                ans += 'X';
        }
    }
    return ans;
}

컴파일 시 표준 에러 (stderr) 메시지

paint.cpp:1:1: error: 'string' does not name a type
    1 | string solve_puzzle(string s, vector<int> c) { c.insert(c.begin(), 0);
      | ^~~~~~
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
      |         ^~~~