結果

問題 No.2946 Puyo
ユーザー pengin_2000
提出日時 2024-10-25 21:41:54
言語 C
(gcc 13.3.0)
結果
AC  
実行時間 36 ms / 2,000 ms
コード長 1,229 bytes
コンパイル時間 391 ms
コンパイル使用メモリ 31,616 KB
実行使用メモリ 10,972 KB
最終ジャッジ日時 2024-10-25 21:42:02
合計ジャッジ時間 3,498 ms
ジャッジサーバーID
(参考情報)
judge3 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 45
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<stdio.h>
char g[1003][1003];
int stack[1000006], ss;
int used[1003][1003];
int ind[1000006], l;
int main()
{
	int h, w;
	scanf("%d %d", &h, &w);
	int i, j;
	for (i = 0; i < h; i++)
		scanf("%s", g[i]);
	int ii, jj, k, s, t;
	int di[4] = { -1,0,1,0 };
	int dj[4] = { 0,-1,0,1 };
	for (i = 0; i < h; i++)
		for (j = 0; j < w; j++)
			used[i][j] = 0;
	int cnt;
	char c;
	for (i = 0; i < h; i++)
	{
		for (j = 0; j < w; j++)
		{
			if (g[i][j] == '.')
				used[i][j]++;
			if (used[i][j] > 0)
				continue;
			cnt = 1;
			ind[0] = w * i + j;
			l = 1;
			c = g[i][j];
			stack[0] = w * i + j;
			ss = 1;
			used[i][j]++;
			while (ss > 0)
			{
				ss--;
				s = stack[ss];
				t = s % w;
				s /= w;
				for (k = 0; k < 4; k++)
				{
					ii = s + di[k];
					jj = t + dj[k];
					if (ii < 0 || jj < 0 || ii >= h || jj >= w)
						continue;
					if (used[ii][jj] > 0 || g[ii][jj] != c)
						continue;
					cnt++;
					used[ii][jj]++;
					ind[l] = w * ii + jj;
					l++;
					stack[ss] = w * ii + jj;
					ss++;
				}
			}
			if (cnt > 3)
			{
				for (k = 0; k < l; k++)
				{
					ii = ind[k] / w;
					jj = ind[k] % w;
					g[ii][jj] = '.';
				}
			}
		}
	}
	for (i = 0; i < h; i++)
		printf("%s\n", g[i]);
	return 0;
}
0