璟雯院

珺璟如晔,雯华若锦

用户工具

站点工具


icpc:problems:usaco21open_acowdemia_iii_b
problems
名称Acowdemia III B
题目编号USACO21OPEN_B3
题目链接usaco.org/…
来源USACO
算法分类枚举, 入门_循环, 入门_字符串
难易程度容易

Acowdemia III B

想法

题目中可以结交朋友的牛均为相邻的牛。统计草地4个方向的牛的数量:

  1. 当大于2时说明该草地一定可以匹配一对朋友。
  2. 当等于2时,检查牛的排布,当牛呈对角线排布,需要检查另一个对角线的草地是否也只有两个牛,如果为只有该两牛相邻的草地,不统计牛数,说明该对牛已经被统计过了。

代码实现

#include<cstdio>
 
const int N = 1010;
int x_turn[4]={-1, 1, 0, 0};
int y_turn[4]={0, 0, -1, 1};
char maps[N][N];
int cnt[N][N];
 
int main() {
	int n, m;
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= n; ++i)
		scanf("%s", maps[i]+1);
 
	int ans = 0;
	for (int i = 1; i <= n; ++i) {
		for (int j = 1; j <= m; ++j) {
			if(maps[i][j] != 'G')continue;
			for (int t = 0; t < 4; ++t)
				if(maps[i+x_turn[t]][j+y_turn[t]] == 'C')cnt[i][j]++;
			if(cnt[i][j] > 2)
				ans++;
			else if(cnt[i][j] == 2) {
				if(maps[i-1][j] == 'C' && maps[i][j-1] == 'C' && cnt[i-1][j-1] == 2)continue;
				if(maps[i-1][j] == 'C' && maps[i][j+1] == 'C' && cnt[i-1][j+1] == 2)continue;
				ans++;
			}
		}
	}
 
	printf("%d", ans);
	return 0;
}
/app/www/public/data/pages/icpc/problems/usaco21open_acowdemia_iii_b.txt · 最后更改: 2023/06/28 10:30 由 温婕莺