博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
D. Anton and Chess 模拟题 + 读题
阅读量:4308 次
发布时间:2019-06-06

本文共 2575 字,大约阅读时间需要 8 分钟。

一开始的时候看不懂题目,以为象是中国象棋那样走,然后看不懂样例。

原来是走对角线的,长知识了。

所以我们就知道,王有八个方向,所以每个方向选一个来做代表就行了。

那么选谁呢?可以排序,按照他们离王的距离从小到大排,这样就能选出最近的那个(不用被棋挡住)

然后注意下方向的表达,在王的右上角,还要和王在同一对角线才行~不能简单地判x和y的大小关系

#include 
#include
#include
#include
#include
#define IOS ios::sync_with_stdio(false)using namespace std;#define inf (0x3f3f3f3f)typedef long long int LL;#include
#include
#include
#include
#include
#include
#include
const int maxn = 500000 + 20;LL xx0, yy0;struct node { char ch; LL x, y; node() {} node(char cc, LL xx, LL yy) : ch(cc), x(xx), y(yy) {} bool operator < (const struct node & rhs) const { LL dis = (x - xx0) * (x - xx0) + (y - yy0) * (y - yy0); LL dis2 = (rhs.x - xx0) * (rhs.x - xx0) + (rhs.y - yy0) * (rhs.y - yy0); return dis < dis2; }}arr[maxn];vector
pos[66];void work() { IOS; int n; cin >> n; cin >> xx0 >> yy0; for (int i = 1; i <= n; ++i) { char str[11]; cin >> str; arr[i].ch = str[0]; cin >> arr[i].x >> arr[i].y; } sort(arr + 1, arr + 1 + n);// for (int i = 1; i <= n; ++i) {// cout << arr[i].ch << " " << arr[i].x << " " << arr[i].y << endl;// } for (int i = 1; i <= n; ++i) { int face = 0; if (arr[i].x == xx0 && arr[i].y > yy0) face = 1; else if (arr[i].x < xx0 && arr[i].y > yy0 && arr[i].x + arr[i].y == xx0 + yy0) face = 2; else if (arr[i].y == yy0 && arr[i].x < xx0) face = 3; else if (arr[i].x < xx0 && arr[i].y < yy0 && arr[i].x - arr[i].y == xx0 - yy0) face = 4; else if (arr[i].x == xx0 && arr[i].y < yy0) face = 5; else if (arr[i].x > xx0 && arr[i].y < yy0 && arr[i].x + arr[i].y == xx0 + yy0) face = 6; else if (arr[i].y == yy0 && arr[i].x > xx0) face = 7; else if (arr[i].x > xx0 && arr[i].y > yy0 && arr[i].x - arr[i].y == xx0 - yy0) face = 8; if (pos[face].size() != 0) continue; pos[face].push_back(arr[i]); }// cout << "fff" << endl; for (int i = 1; i <= 8; ++i) { if ((i == 1 || i == 5) && pos[i].size() && (pos[i][0].ch == 'Q' || pos[i][0].ch == 'R')) { printf("YES\n"); return; } else if ((i == 2 || i == 6) && pos[i].size() && (pos[i][0].ch == 'Q' || pos[i][0].ch == 'B')) { printf("YES\n"); return; } else if ((i == 3 || i == 7) && pos[i].size() && (pos[i][0].ch == 'Q' || pos[i][0].ch == 'R')) { printf("YES\n"); return; } else if ((i == 4 || i == 8) && pos[i].size() && (pos[i][0].ch == 'B' || pos[i][0].ch == 'Q')) { printf("YES\n"); return; } } printf("NO\n");}int main() {#ifdef local freopen("data.txt","r",stdin);#endif work(); return 0;}
View Code

 

转载于:https://www.cnblogs.com/liuweimingcprogram/p/6068366.html

你可能感兴趣的文章
IntelliJ IDEA 连接数据库 详细过程
查看>>
redis完全攻略
查看>>
D3---01基础的柱状图制作(转)
查看>>
Time-Varying Mesh Compression
查看>>
SocketServer源码学习(二)
查看>>
编写DLL所学所思(1)——导出函数
查看>>
POJ3006-Dirichlet's Theorem on Arithmetic Progressions
查看>>
QT分页控件,开源,供大家使用
查看>>
005.LVM删除
查看>>
Hibernate 简介(百度)
查看>>
深入理解 KVC\KVO 实现机制 — KVC
查看>>
Android develop 国际化
查看>>
快速求幂算法
查看>>
Freemarker模板引擎
查看>>
jQuery:表格的奇偶行变色,jquery实例之表格隔一行
查看>>
(Object-C)学习笔记(一)--开发环境配置和与c语言的区别
查看>>
hdu 3549 Flow Problem(最大流模板)
查看>>
编译器错误 CS1026
查看>>
centos安装coreseek
查看>>
gitlab应用
查看>>