思路分析:我们先考虑,Vasiliy是比Polycarp有优势的,他可以在没有阻拦且在未到边界的情况下一次走出Polycarp两次的路,所以我们的Polycarp想要获胜就有了两种方法,第一种是在Vasiliy尽可能多的走斜边的情况下Polycarp步数仍然较少,此时由于Polycarp走的相对较慢,他一定更靠近终点,所以Vasiliy是一定堵不着他的,于是他稳赢,再来考虑在Vasiliy尽可能多的走斜边的情况下Polycarp步数较多的情况,此时虽然Polycarp步数多,但他依然有可能比Vasiliy更靠近终点,如果Polycarp在Vasiliy和两边界所形成的矩形之内,Polycarp想要获胜一定会去堵Vasiliy,且一定可以成功,因为Vasiliy一定会靠近终点,相对靠近了Polycarp,此时可以Polycarp就可以守株待兔了。
代码:
1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 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 "); 23 return 0; 24 } 25 else if(x>a||y>b){//Polycarp在Vasiliy内 26 printf("Vasiliy "); 27 return 0; 28 } 29 printf("Polycarp "); 30 return 0; 31 }