Codeforces Round #379 (Div. 2) D. Anton and Chess —— 基础题
题目链接:http://codeforces.com/contest/734/problem/D
4 seconds
256 megabytes
standard input
standard output
Anton likes to play chess. Also, he likes to do programming. That is why he decided to write the program that plays chess. However, he finds the game on 8 to 8 board
to too simple, he uses an infinite one instead.
The first task he faced is to check whether the king is in check. Anton doesn't know how to implement this so he asks you to help.
Consider that an infinite chess board contains one white king and the number of black pieces. There are only rooks, bishops and queens, as the other pieces are not supported yet. The white king is said to be in check if at least one black piece can reach the
cell with the king in one move.
Help Anton and write the program that for the given position determines whether the white king is in check.
Remainder, on how do chess pieces move:
- Bishop moves any number of cells diagonally, but it can't "leap" over the occupied cells.
- Rook moves any number of cells horizontally or vertically, but it also can't "leap" over the occupied cells.
- Queen is able to move any number of cells horizontally, vertically or diagonally, but it also can't "leap".
The first line of the input contains a single integer n (1 ≤ n ≤ 500 000) —
the number of black pieces.
The second line contains two integers x0 and y0 ( - 109 ≤ x0, y0 ≤ 109) —
coordinates of the white king.
Then follow n lines, each of them contains a character and two integers xi and yi ( - 109 ≤ xi, yi ≤ 109) —
type of the i-th piece and its position. Character 'B'
stands for the bishop, 'R' for the rook and 'Q' for the
queen. It's guaranteed that no two pieces occupy the same position.
The only line of the output should contains "YES" (without quotes) if the white king is in check and "NO"
(without quotes) otherwise.
2
4 2
R 1 1
B 1 5
YES
2
4 2
R 3 3
B 1 5
NO
Picture for the first sample:

White king is in check, because the black bishop can reach the cell with the white king in one move. The answer is "YES".
Picture for the second sample:

Here bishop can't reach the cell with the white king, because his path is blocked by the rook, and the bishop cant "leap" over it. Rook can't reach the white king, because it can't move diagonally. Hence, the king is not in check and the answer is "NO"
题解:
1.在King的八个方向上,分别记录离其最近的棋子。
2.如果在横、竖线上,存在Rook或者Queen,则King in check; 如果在对角线上,存在Bishop或者Queen, 则King in check。
学习之处:
对角线的表示:
1.左上右下: x-y (注意:如果需要用非负数表示,则x-y+n)
2.右上左下:x+y
代码如下;
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const double eps = 1e-6;
const int INF = 2e9;
const LL LNF = 9e18;
const int mod = 1e9+7;
const int maxn = 1e5+10; int n, xo, yo;
int a[10][5];
map<string, int>m; void f(int x, int y, int id) //分别在八个方向上取最近的棋
{
if(x==xo)
{
if(y<yo && (a[1][1]==INF || y>a[1][2]) )
a[1][1] = x, a[1][2] = y, a[1][3] = id;
if(y>yo && ( a[2][1]==INF || y<a[2][2]) )
a[2][1] = x, a[2][2] = y, a[2][3] = id;
}
else if(y==yo)
{
if(x<xo && ( a[3][1]==INF || x>a[3][1] ) )
a[3][1] = x, a[3][2] = y, a[3][3] = id;
if(x>xo && ( a[4][1]==INF || x<a[4][1]) )
a[4][1] = x, a[4][2] = y, a[4][3] = id;
}
else if(x-y==xo-yo)
{
if(x<xo && ( a[5][1]==INF || x>a[5][1]) )
a[5][1] = x, a[5][2] = y, a[5][3] = id;
if(x>xo && ( a[6][1]==INF || x<a[6][1]) )
a[6][1] = x, a[6][2] = y, a[6][3] = id;
}
else if(x+y==xo+yo)
{
if(x>xo && ( a[7][1]==INF || x<a[7][1]) )
a[7][1] = x, a[7][2] = y, a[7][3] = id;
if(x<xo && ( a[8][1]==INF || x>a[8][1]) )
a[8][1] = x, a[8][2] = y, a[8][3] = id;
}
} int main()
{
scanf("%d%d%d",&n,&xo, &yo); m["B"] = 1; m["R"] = 2; m["Q"] = 3;
for(int i = 0; i<10; i++)
a[i][1] = INF; string s; int x, y;
for(int i = 1; i<=n; i++)
{
cin>>s>>x>>y;
f(x, y, m[s]);
} int B = 0;
for(int i = 1; i<=4; i++) //横、竖
if(a[i][1]!=INF && ( a[i][3]==2 || a[i][3]==3))
B = 1;
for(int i = 5; i<=8; i++) //对角线
if(a[i][1]!=INF && ( a[i][3]==1 || a[i][3]==3))
B = 1;
printf("%s\n", B? "YES" : "NO");
}
Codeforces Round #379 (Div. 2) D. Anton and Chess —— 基础题的更多相关文章
- Codeforces Round #379 (Div. 2) D. Anton and Chess 水题
D. Anton and Chess 题目连接: http://codeforces.com/contest/734/problem/D Description Anton likes to play ...
- Codeforces Round #379 (Div. 2) D. Anton and Chess 模拟
题目链接: http://codeforces.com/contest/734/problem/D D. Anton and Chess time limit per test4 secondsmem ...
- Codeforces Round #379 (Div. 2) B. Anton and Digits 水题
B. Anton and Digits 题目连接: http://codeforces.com/contest/734/problem/B Description Recently Anton fou ...
- Codeforces Round #379 (Div. 2) A. Anton and Danik 水题
A. Anton and Danik 题目连接: http://codeforces.com/contest/734/problem/A Description Anton likes to play ...
- Codeforces Round #379 (Div. 2) E. Anton and Tree 缩点 直径
E. Anton and Tree 题目连接: http://codeforces.com/contest/734/problem/E Description Anton is growing a t ...
- Codeforces Round #379 (Div. 2) C. Anton and Making Potions 枚举+二分
C. Anton and Making Potions 题目连接: http://codeforces.com/contest/734/problem/C Description Anton is p ...
- Codeforces Round #379 (Div. 2) E. Anton and Tree —— 缩点 + 树上最长路
题目链接:http://codeforces.com/contest/734/problem/E E. Anton and Tree time limit per test 3 seconds mem ...
- Codeforces Round #379 (Div. 2) C. Anton and Making Potions —— 二分
题目链接:http://codeforces.com/contest/734/problem/C C. Anton and Making Potions time limit per test 4 s ...
- Codeforces Round #379 (Div. 2) E. Anton and Tree 树的直径
E. Anton and Tree time limit per test 3 seconds memory limit per test 256 megabytes input standard i ...
随机推荐
- 最简单的window下使用Jenkins来做自动化部署的教程
今天我们来说一下,如何使用Jenkins+powershell脚本,将我们的.NET CORE的脚本部署到对应的服务器上. 这里我们使用的源码管理工具是TFS.虽然源码管理器比较老旧,但是原理都差不多 ...
- 洛谷——P2737 [USACO4.1]麦香牛块Beef McNuggets
https://www.luogu.org/problemnew/show/P2737 题目描述 农夫布朗的奶牛们正在进行斗争,因为它们听说麦当劳正在考虑引进一种新产品:麦香牛块.奶牛们正在想尽一切办 ...
- codevs——3344 迷宫
3344 迷宫 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 小刚在迷宫内,他需要从A点出发,按顺序经过B, ...
- indy9在程序关闭时出现terminate thread timeout的BUG解决办法
indy9在程序关闭时出现terminate thread timeout的BUG解决办法 INDY9线程有BUG,在退出程序的时候会报错:terminate thread timeout(终止线程超 ...
- scrapy 启动失败,scrapy startproject test 出错 'module' object has no attribute 'OP_NO_TLSv1_1
你先看看 pip install scrapy需要的 pyopenssl twisted 等和你安装的版本一样么 我的就是因为TWist 版本高于 需要的 用pip install twist ...
- git pull出现fatal: unable to access 'https://github.com/XXX/YYY.git'
用cmd 发现ping不同 github.com Ping不通,这时候,只需要在host文件里做些修改就可以,首先,定位到路径 C:\Windows\System32\drivers\etc 找到ho ...
- [C++11]_[0基础]_[左值引用声明和右值引用声明]
场景: 在 remove_reference 结构体中能看到右值引用的身影 &&, 那么这里的右值引用究竟有什么用呢? 常常也发现int& 和int&& 这两种 ...
- 我对Lamport Logical Clock的理解
建议先看论文原文再来看这篇文章,我不会对论文中的各个点都具体说明.仅仅是写一些我自己的想法,帮助理解. 大家都知道.分布式环境下.确定各个事件发生的顺序非常重要,不然就会发生一些麻烦的问题. 考虑一下 ...
- log4j:WARN Please initialize the log4j system properly解决的方法
要解决问题很easy,建立LOG4J 的配置文件就可以. 在src 文件夹下创建配置文件,选 一.择菜单File > New > File,文件名称输入log4j.properties,文 ...
- myeclipse2014破解
去年出现的struts2 bug问题,在过去的项目中一直没做调整,前段时间发现受到影响了.本想这个bug都已经这么长时间了,工具中的包应该也已经被替换了吧,于是下载了最新的myeclipse2014, ...