Anton and Chess(模拟+思维)
Posted thunder-110
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Anton and Chess(模拟+思维)相关的知识,希望对你有一定的参考价值。
http://codeforces.com/group/1EzrFFyOc0/contest/734/problem/D
题意:就是给你一个很大的棋盘,给你一个白棋的位置还有n个黑棋的位置,问你黑棋能否一步就吃掉白棋
给你如下规则
1.‘B‘只能对角线移动,而且不能越过其他黑棋。
2.’R‘只能上下左右移动,而且不能越过其他黑棋。
3.‘Q’既能对角线移动又能左右移动,但是不能越过其他黑棋。
这是看了别人的代码,很长,但只是粘贴复制,再改一下一下就行了;
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<string> 7 #include<cmath> 8 #include<set> 9 #include<vector> 10 #include<stack> 11 #include<queue> 12 #include<map> 13 using namespace std; 14 #define ll long long 15 #define se second 16 #define fi first 17 const int INF= 0x3f3f3f3f; 18 const int N=5e5+5; 19 20 int n,x,y; 21 22 struct note{ 23 int x; 24 int y; 25 char c; 26 }a[N]; 27 struct note1{ 28 int s; 29 char q; 30 }dis[9]; 31 32 int main() 33 { 34 cin>>n; 35 cin>>x>>y; 36 37 for(int i=1;i<=8;i++) 38 dis[i].s=INF<<1; 39 40 for(int i=1;i<=n;i++) 41 { 42 cin>>a[i].c; 43 scanf("%d%d",&a[i].x,&a[i].y); 44 if( a[i].y==y && a[i].x-x>0 && dis[1].s>a[i].x-x ){ 45 dis[1].s = a[i].x -x; 46 dis[1].q = a[i].c; //最近的更新为 c 47 } 48 else if( a[i].y==y && x-a[i].x>0 && dis[2].s>x-a[i].x ){ 49 dis[2].s = x- a[i].x ; 50 dis[2].q = a[i].c; //最近的更新为 c 51 } 52 else if( a[i].x==x && a[i].y-y>0 && dis[3].s>a[i].y-y ){ 53 dis[3].s = a[i].y -y; 54 dis[3].q = a[i].c; //最近的更新为 c 55 } 56 else if( a[i].x==x && y-a[i].y>0 && dis[4].s>y-a[i].y ){ 57 dis[4].s = y- a[i].y ; 58 dis[4].q = a[i].c; //最近的更新为 c 59 } 60 else if(abs(a[i].x-x)==abs(a[i].y-y) && a[i].x>x &&a[i].y>y &&dis[5].s>abs(a[i].x-x)) 61 { 62 dis[5].s =abs(a[i].x-x); 63 dis[5].q = a[i].c; 64 } 65 else if(abs(a[i].x-x)==abs(a[i].y-y) && a[i].x<x &&a[i].y>y &&dis[6].s>abs(a[i].x-x)) 66 { 67 dis[6].s =abs(a[i].x-x); 68 dis[6].q = a[i].c; 69 } 70 else if(abs(a[i].x-x)==abs(a[i].y-y) && a[i].x<x &&a[i].y<y &&dis[7].s>abs(a[i].x-x)) 71 { 72 dis[7].s =abs(a[i].x-x); 73 dis[7].q = a[i].c; 74 } 75 else if(abs(a[i].x-x)==abs(a[i].y-y) && a[i].x>x &&a[i].y<y &&dis[8].s>abs(a[i].x-x)) 76 { 77 dis[8].s =abs(a[i].x-x); 78 dis[8].q = a[i].c; 79 } 80 } 81 int flag=0; 82 for(int i=1;i<=4;i++) 83 { 84 if(dis[i].q==‘R‘||dis[i].q==‘Q‘) flag=1; 85 } 86 for(int i=5;i<=8;i++) 87 { 88 if(dis[i].q==‘B‘||dis[i].q==‘Q‘) flag=1; 89 } 90 if(flag) cout<<"YES"; 91 else cout<<"NO"; 92 }
以上是关于Anton and Chess(模拟+思维)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces1545 B. AquaMoon and Chess(思维+组合数学)
CodeForces 785 D Anton and School - 2 范德蒙恒等式