icpc:problems:usaco21open_acowdemia_iii_b
problems | |
---|---|
名称 | Acowdemia III B |
题目编号 | USACO21OPEN_B3 |
题目链接 | usaco.org/… |
来源 | USACO |
算法分类 | 枚举, 入门_循环, 入门_字符串 |
难易程度 | 容易 |
Acowdemia III B
想法
题目中可以结交朋友的牛均为相邻的牛。统计草地4个方向的牛的数量:
- 当大于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 由 温婕莺