제출 #1232045

#제출 시각아이디문제언어결과실행 시간메모리
1232045badge881Paint By Numbers (IOI16_paint)C++20
32 / 100
0 ms328 KiB
#include <bits/stdc++.h> #include "paint.h" using namespace std; const string type[4] = {"X", "_", ".", "?"}; inline int id(char c) { switch (c) { case 'X': return 0; case '_': return 1; case '.': return 2; case '?': return 3; default: return -1; // Invalid character } } string solve_puzzle(string s, vector<int> c) { vector<int> base; for (auto &i : s) base.push_back(id(i)); int n = base.size(); int k = c.size(); auto isOk = [&](int left, int right) { bool valid = true; for (int i = left; i <= right; i++) valid = valid && base[i] != 1; return valid; }; vector<bool> is_black(n, false), is_white(n, false); vector<int> min_pos(k, 0), max_pos(k, n - 1); for (int i = 0; i < k; i++) { min_pos[i] = i == 0 ? 0 : min_pos[i - 1] + c[i - 1] + 1; while (!isOk(min_pos[i], min_pos[i] - 1 + c[i])) min_pos[i]++; } for (int i = k - 1; i >= 0; i--) { max_pos[i] = i == k - 1 ? n - 1 : max_pos[i + 1] - c[i + 1] - 1; while (!isOk(max_pos[i] - c[i], max_pos[i])) max_pos[i]--; } vector<bool> touched(n, false); for (int i = 0; i < k; i++) { int L = max_pos[i] - c[i] + 1, R = min_pos[i] + c[i] - 1; for (int j = min_pos[i]; j <= max_pos[i]; j++) { if (base[j] == 1) continue; int cl = j, cr = j; while (cl > 0 && base[cl - 1] != 1) cl--; while (cr < n - 1 && base[cr + 1] != 1) cr++; if (cr - cl + 1 >= c[i]) touched[j] = true; } if (L > R) continue; for (int j = L; j <= R; j++) is_black[j] = true; } for (int i = 0; i < k - 1; i++) for (int j = max_pos[i] + 1; j < min_pos[i + 1]; j++) is_white[j] = true; for (int i = 0; i < n; i++) if (!touched[i]) is_white[i] = true; string ans; for (int i = 0; i < n; i++) { if (is_black[i] && !(is_white[i])) ans += "X"; else if (is_white[i] && !(is_black[i])) ans += "_"; else ans += "?"; } return ans; }

컴파일 시 표준 에러 (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...