牛客小白月赛4 C 病菌感染

链接:https://www.nowcoder.com/acm/contest/134/C
来源:牛客网

题目描述 
铁子和顺溜上生物课的时候不小心将几滴超级病菌滴到了培养皿上,这可急坏了他们。
培养皿可以被看成一个n*n的方格,最初病菌滴在了这n*n的格子中的某些格子,病菌的传染方式是这样的,如果一个方格与两个或多个被感染的方格相邻(两个方格相邻当且仅当它们只有一条公共边),
那么它就会被感染。现在铁子和顺溜想知道,最终所有的方格会不会都被感染。
输入描述:
第一行两个整数n,m。n表示方格的规格,m表示最初病菌所在的格子数。(1 ≤ n ≤ 1000, 0 < m < n)。
接下来m行每行两个整数xi,yi表示第xi行的第yi个格子有病菌。
数据保证不会有两个病菌初始时在同一个格子。
输出描述:
如果最终所有的方格都会被感染,输出 YES。
否则输出 NO。
示例1
输入
3 2
1 2
2 2
输出
NO

题解+AC代码:

//还挺简单的,按第一行逐列遍历第j列的副对角线上和j+2列的副对角线,处理一下就好了。
//但是官方题解说,因为周长一定,无论怎么输入答案都是NO。
#include<iostream> #include<algorithm> #include<cstring> using namespace std; int n, m; int wap[1001][1001]; int main() { while (cin >> n >> m) { memset(wap, 0, sizeof(wap)); int x, y; for (int i = 1; i <= m; ++i) { cin >> x >> y; wap[x][y] = 1; } int k; for (int i = 1; i <= m; ++i) { k = 1; for (int j = i; j >= 1; --j) { if (wap[k][j] == 1 && wap[k + 1][j - 1] == 1 && k + 1 <= n && j - 1 >= 1) { wap[k][j - 1] = 1; wap[k + 1][j] = 1; } else if (wap[k][j] == 1 && wap[k + 1][j + 1] == 1 && k + 1 <= n && j + 1 <=n) { wap[k][j + 1] = 1; wap[k + 1][j] = 1; } } } int node = 0; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { if (!wap[i][j]) { node = 1; break; } } } if (node) cout << "NO" << endl; else cout << "YES" << endl; } return 0; }

今天也是元气满满的一天,good luck Ikefire;

posted @ 2018-06-20 17:30  ikefire  阅读(256)  评论(0编辑  收藏  举报