概述
三种棋子走向:
棋子一,沿对角线走
棋子二:水平走或者竖直走
棋子三:沿对角线,水平,或者竖直走
棋子一次可以走任意长度,但是如果棋子和king之间有棋子,就不能走,最后攻击king所在位置
算出每个棋子到king 的距离,然后从小到大排列,遍历所有点,离king 的八个方向最近的棋子能不能攻击king
代码:
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Node
{
char ch[10];
int x,y;
__int64 d;
}a[500010];
bool cmp(Node a,Node b)
{
return a.d<b.d;
}
int main()
{
int n;
__int64 x0,y0;
int vis[10];
scanf("%d",&n);
scanf("%I64d%I64d",&x0,&y0);
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
scanf("%s%d%d",a[i].ch,&a[i].x,&a[i].y);
__int64 xx=a[i].x;
__int64 yy=a[i].y;
a[i].d=(xx-x0)*(xx-x0)+(yy-y0)*(yy-y0);
}
sort(a,a+n,cmp);
int flag=0;
for(int i=0;i<n;i++)
{
if(flag==1)
break;
if(a[i].x==x0)
{
if(a[i].y>y0&&vis[1]==0)
{
vis[1]=1;
if(a[i].ch[0]=='R'||a[i].ch[0]=='Q')
flag=1;
}
else if(a[i].y<y0&&vis[2]==0)
{
vis[2]=1;
if(a[i].ch[0]=='R'||a[i].ch[0]=='Q')
flag=1;
}
}
else if(a[i].y==y0)
{
if(a[i].x<x0&&!vis[3])
{
vis[3]=1;
if(a[i].ch[0]=='R'||a[i].ch[0]=='Q')
flag=1;
}
else if(a[i].x>x0&&!vis[4])
{
vis[4]=1;
if(a[i].ch[0]=='R'||a[i].ch[0]=='Q')
flag=1;
}
}
else if(abs(a[i].x-x0)==abs(a[i].y-y0))
{
if(a[i].x>x0&&a[i].y>y0&&!vis[5])
{
vis[5]=1;
if(a[i].ch[0]=='B'||a[i].ch[0]=='Q')
flag=1;
}
else if(a[i].x>x0&&a[i].y<y0&&!vis[6])
{
vis[6]=1;
if(a[i].ch[0]=='B'||a[i].ch[0]=='Q')
flag=1;
}
else if(a[i].x<x0&&a[i].y>y0&&!vis[7])
{
vis[7]=1;
if(a[i].ch[0]=='B'||a[i].ch[0]=='Q')
flag=1;
}
else if(a[i].x<x0&&a[i].y<y0&&!vis[8])
{
vis[8]=1;
if(a[i].ch[0]=='B'||a[i].ch[0]=='Q')
flag=1;
}
}
}
if(flag==1)
printf("YESn");
else
printf("NOn");
return 0;
}
最后
以上就是感性康乃馨为你收集整理的codeforces 734 (思维 暴力)的全部内容,希望文章能够帮你解决codeforces 734 (思维 暴力)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复