結果
| 問題 |
No.307 最近色塗る問題多くない?
|
| コンテスト | |
| ユーザー |
maine_honzuki
|
| 提出日時 | 2021-05-14 21:23:14 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,961 ms / 4,000 ms |
| コード長 | 1,693 bytes |
| コンパイル時間 | 3,228 ms |
| コンパイル使用メモリ | 207,296 KB |
| 最終ジャッジ日時 | 2025-01-21 11:08:11 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 36 |
ソースコード
//https://ncode.syosetu.com/n4830bu/307/
#include <bits/stdc++.h>
using namespace std;
int main() {
int H, W;
cin >> H >> W;
vector A(H, vector(W, 0));
for (auto&& V : A) {
for (auto&& a : V) {
cin >> a;
}
}
int Q;
cin >> Q;
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
int clr = -1;
bool maine = false;
vector cnt(H, vector(W, 0));
while (Q--) {
int R, C, X;
cin >> R >> C >> X;
R--;
C--;
if (maine) {
clr = X;
continue;
}
if (A[R][C] == X)
continue;
vector seen(H, vector(W, false));
queue<pair<int, int>> que;
que.push({R, C});
seen[R][C] = true;
while (!que.empty()) {
auto [h, w] = que.front();
cnt[h][w]++;
que.pop();
for (int i = 0; i < 4; i++) {
int h_nxt = h + dx[i], w_nxt = w + dy[i];
if (h_nxt >= 0 && h_nxt < H && w_nxt >= 0 && w_nxt < W) {
if (!seen[h_nxt][w_nxt] && A[h_nxt][w_nxt] != X) {
seen[h_nxt][w_nxt] = true;
que.push({h_nxt, w_nxt});
}
}
}
}
for (int h = 0; h < H; h++) {
for (int w = 0; w < W; w++) {
if (seen[h][w])
A[h][w] = X;
if (cnt[h][w] > H + W)
maine = true;
}
}
}
for (int h = 0; h < H; h++) {
for (int w = 0; w < W; w++) {
cout << (clr == -1 ? A[h][w] : clr) << " \n"[w == W - 1];
}
}
}
maine_honzuki