G.国王的战争
Time Limit: 1000 MS | Memory Limit: 65536 KB |
Total Submissions: 81 | Accepted: 51 |
Description
国际象棋中的国王,可以攻击相邻的8个位置(即上、下、左、右和左上,左下,右上,右下),现在给定一个N * M的棋盘,以及其中放置的K个国王的位置,请问他们是否能够互相攻击。
Input
第一行:N M K——棋盘大小以及放置的国王数量(1<=n, m<=100, 0<=k<=200)
以后K行每行都包含两个值r和c,代表一个国王被放置在第r行第c列(棋盘的行序号从1到N,列序号从1到M)。
Output
如果存在国王可以相互攻击,输出“YES”,否则输出“NO”。
Sample Input
3 3 2
1 1
3 3
1 1
3 3
Sample Output
NO
Source
安徽省2014年“京胜杯”大学生程序设计竞赛
水题
/** * Project Name: 省赛 * File Name: G国王的战争.cpp * Created on: 2015年4月26日 下午2:30:38 * Author: jtahstu * QQ: 1373758426 E-mail:1373758426@qq.com * Copyright (c) 2015, jtahstu , All Rights Reserved. */ //Sample Input //3 3 2 //1 1 //3 3 //Sample Output //NO #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<string> #include<cstring> using namespace std; int main() { int a[105][105], n, m, k, x, y; while (cin >> n >> m >> k) { memset(a, 0, sizeof(a)); for (int i = 0; i < k; i++) { cin >> x >> y; a[x][y] = 1; } bool flag = true; for (int i = 1; i <= n; i++) if (flag) for (int j = 1; j <= m; j++) { if (a[i][j] == 1) { if (a[i - 1][j] == 1 || a[i - 1][j - 1] == 1 || a[i - 1][j + 1] == 1 || a[i + 1][j] == 1 || a[i + 1][j + 1] == 1 || a[i + 1][j - 1] == 1 || a[i][j - 1] == 1 || a[i][j + 1] == 1) { flag = false; break; } } } if (!flag) cout << "YES" << endl; else cout << "NO" << endl; } return 0; }