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(思维+组合数学)

Anton and Fairy Tale (公式)

Anton and Fairy Tale (公式)

CodeForces 785 D Anton and School - 2 范德蒙恒等式

codeforces 7 A. Kalevitch and Chess

#404 (div2)Anton and School - 2