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;
}