結果

問題 No.2946 Puyo
ユーザー NakLon131NakLon131
提出日時 2024-10-26 09:14:32
言語 Rust
(1.77.0 + proconio)
結果
AC  
実行時間 343 ms / 2,000 ms
コード長 1,771 bytes
コンパイル時間 13,701 ms
コンパイル使用メモリ 400,872 KB
実行使用メモリ 67,064 KB
最終ジャッジ日時 2024-11-21 23:25:05
合計ジャッジ時間 23,794 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
5,248 KB
testcase_01 AC 1 ms
5,248 KB
testcase_02 AC 1 ms
5,248 KB
testcase_03 AC 340 ms
66,952 KB
testcase_04 AC 340 ms
66,956 KB
testcase_05 AC 334 ms
66,948 KB
testcase_06 AC 341 ms
66,964 KB
testcase_07 AC 343 ms
67,064 KB
testcase_08 AC 18 ms
6,176 KB
testcase_09 AC 87 ms
19,212 KB
testcase_10 AC 14 ms
5,248 KB
testcase_11 AC 157 ms
34,616 KB
testcase_12 AC 18 ms
6,172 KB
testcase_13 AC 1 ms
5,248 KB
testcase_14 AC 26 ms
6,820 KB
testcase_15 AC 12 ms
5,248 KB
testcase_16 AC 41 ms
10,592 KB
testcase_17 AC 136 ms
22,268 KB
testcase_18 AC 2 ms
5,248 KB
testcase_19 AC 45 ms
8,164 KB
testcase_20 AC 64 ms
12,204 KB
testcase_21 AC 117 ms
21,428 KB
testcase_22 AC 14 ms
5,248 KB
testcase_23 AC 52 ms
8,756 KB
testcase_24 AC 142 ms
23,104 KB
testcase_25 AC 111 ms
15,492 KB
testcase_26 AC 124 ms
16,440 KB
testcase_27 AC 3 ms
5,248 KB
testcase_28 AC 57 ms
10,240 KB
testcase_29 AC 80 ms
13,696 KB
testcase_30 AC 44 ms
8,320 KB
testcase_31 AC 67 ms
11,648 KB
testcase_32 AC 73 ms
12,064 KB
testcase_33 AC 64 ms
11,292 KB
testcase_34 AC 95 ms
16,192 KB
testcase_35 AC 83 ms
14,064 KB
testcase_36 AC 92 ms
14,444 KB
testcase_37 AC 108 ms
17,512 KB
testcase_38 AC 84 ms
14,640 KB
testcase_39 AC 82 ms
14,344 KB
testcase_40 AC 59 ms
12,376 KB
testcase_41 AC 131 ms
23,352 KB
testcase_42 AC 126 ms
22,544 KB
testcase_43 AC 53 ms
9,600 KB
testcase_44 AC 66 ms
11,392 KB
testcase_45 AC 54 ms
9,728 KB
testcase_46 AC 33 ms
6,784 KB
testcase_47 AC 54 ms
9,728 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

fn main() {
    input!{
		h: usize, w: usize,
		g: [Chars; h],
	}

	// 先頭座標-連結成分の個数 を管理
	let mut mp = HashMap::new();

	// 探索の先頭座標を入れる
	let mut seen = vec![vec![INF; w]; h];

	let d = vec!{(!0, 0), (0, !0), (1, 0), (0, 1)}; // 上左下右
	
	// 各マス試す
	for i in 0..h {
		for j in 0..w {
			if seen[i][j] != INF { continue; }

			// BFS
			{
				let mut cnt = 0; // 同じ色の個数

				let mut dq = VecDeque::new();
				dq.push_back((i, j));
				seen[i][j] = i*w+j;
				cnt += 1;

				while dq.len() > 0 {
					let (ci, cj) = dq.pop_front().unwrap();
					for k in 0..4 {
						let ni = ci.wrapping_add(d[k].0);
						let nj = cj.wrapping_add(d[k].1);
						if ni >= h || nj >= w || seen[ni][nj] != INF || g[ni][nj] != g[ci][cj] { continue; }
						seen[ni][nj] = i*w+j;
						dq.push_back((ni, nj));
						cnt += 1;
					}
				}
				mp.insert(i*w+j, cnt);
			}

		}
	}

	// seenの値にある連結成分を確認して、4以上なら.にする。
	let mut ans_g = g.clone();
	for i in 0..h {
		for j in 0..w {
			let num = seen[i][j];
			if *mp.get(&num).unwrap() >= 4 {
				ans_g[i][j] = '.';
			}
		}
	}
	for i in 0..h {
		for j in 0..w {
			print!("{}", ans_g[i][j]);
		}
		println!();
	}
}

// const MOD17: usize = 1000000007;
// const MOD93: usize = 998244353;
const INF: usize = 1 << 60;
// let dx = vec![!0, 0, 1, 0]; // 上左下右
// let dy = vec![0, !0, 0, 1]; // 上左下右


#[allow(unused)]
use proconio::{input, marker::Chars, marker::Usize1};

#[allow(unused)]
use std::{
	mem::swap,
	cmp::min, cmp::max,
	cmp::Reverse,
	collections::HashSet, collections::BTreeSet,
	collections::HashMap, collections::BTreeMap,
	collections::BinaryHeap,
	collections::VecDeque,
	iter::FromIterator,
};
0