2014省赛-G国王的战争

时间:2022-09-10 14:51:08

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行每行都包含两个值rc,代表一个国王被放置在第r行第c(棋盘的行序号从1N,列序号从1M)


Output


如果存在国王可以相互攻击,输出“YES”,否则输出“NO”。


Sample Input


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