51nod1534 棋子游戏

51nod1534 棋子游戏_第1张图片

思路分析:我们先考虑,Vasiliy是比Polycarp有优势的,他可以在没有阻拦且在未到边界的情况下一次走出Polycarp两次的路,所以我们的Polycarp想要获胜就有了两种方法,第一种是在Vasiliy尽可能多的走斜边的情况下Polycarp步数仍然较少,此时由于Polycarp走的相对较慢,他一定更靠近终点,所以Vasiliy是一定堵不着他的,于是他稳赢,再来考虑在Vasiliy尽可能多的走斜边的情况下Polycarp步数较多的情况,此时虽然Polycarp步数多,但他依然有可能比Vasiliy更靠近终点,如果Polycarp在Vasiliy和两边界所形成的矩形之内,Polycarp想要获胜一定会去堵Vasiliy,且一定可以成功,因为Vasiliy一定会靠近终点,相对靠近了Polycarp,此时可以Polycarp就可以守株待兔了。

代码:

 1 #include
 2 #include
 3 #include
 4 using namespace std;
 5 const int N=1e6+10;
 6 int count(int a,int b){
 7     int cnt=0;
 8     while(a>0&&b>0){
 9         a--;b--;
10         cnt++;
11     }
12     cnt+=a+b;
13     return cnt;
14 }
15 int main(){
16     int x,y,a,b;
17     scanf("%d%d%d%d",&x,&y,&a,&b);
18     int step1,step2;
19     step1=x+y; //计算两个人各自的步数 
20     step2=count(a,b);
21     if(step1<=step2){//Polycarp步数少 
22         printf("Polycarp\n");
23         return 0;
24     }
25     else if(x>a||y>b){//Polycarp在Vasiliy内 
26         printf("Vasiliy\n");
27         return 0;
28     }
29     printf("Polycarp\n");
30     return 0;
31 }
View Code

 

你可能感兴趣的:(51nod1534 棋子游戏)