璟雯院

珺璟如晔,雯华若锦

用户工具

站点工具


icpc:problems:usaco23feb_stamp_grid_b
problems
名称Stamp Grid B
题目编号USACO23FEB_B2
题目链接luogu.com.cn/…
来源USACO
算法分类模拟
难易程度容易

Stamp Grid B

想法

模拟拓印过程,如果可以印,就直接印,最后判断画布与目标状态即可。

代码实现

#include<cstdio>
#include<cstring>
 
const int N = 30;
char paint[N][N], str[N][N], target[N][N], temp[N][N];
 
int main() {
	int T;
	scanf("%d", &T);
	while(T--) {
		int n, k;
		memset(paint, 0, sizeof(paint));
		memset(str, 0, sizeof(str));
		memset(target, '.', sizeof(target));
		scanf("%d", &n);
		for (int i = 0; i < n; ++i) 
			scanf("\n%s", paint[i]);
		scanf("%d", &k);
		for (int i = 0; i < k; ++i) 
			scanf("\n%s", str[i]);
 
		for (int i = 0; i <= n-k; ++i) {
			for (int j = 0; j <= n-k; ++j) {
				for (int t = 0; t < 4; ++t) {
					bool flag = true;
					for (int a = 0; a < k && flag; ++a)
						for (int b = 0; b < k && flag; ++b)
							if(paint[i+a][j+b] == '.' && str[a][b] != '.')
								flag = false;
 
					if(flag){
						for (int a = 0; a < k; ++a) 
							for (int b = 0; b < k; ++b) 
								if(target[i+a][j+b] == '.' && str[a][b] != '.')
									target[i+a][j+b] = '*';
					}
 
					memcpy(temp, str, sizeof(str));
					for (int a = 0; a < k; ++a)
						for (int b = 0; b < k; ++b) 
							str[a][b] = temp[k-1-b][a];
				}
			}
		}
 
		bool flag = true;
		for (int i = 0; i < n && flag; ++i) 
			for (int j = 0; j < n && flag; ++j) 
				if(target[i][j] != paint[i][j])
					flag = false;
 
		if(flag)
			printf("YES\n");
		else
			printf("NO\n");
	}
 
	return 0;
}
/app/www/public/data/pages/icpc/problems/usaco23feb_stamp_grid_b.txt · 最后更改: 2023/05/02 09:30 由 温婕莺