题目:
分析:
首先,如果各走各的,谁会赢,这就很简单了,对于第一个人来说,他就是需要x+y各单位时间,而对于第二个人来说需要max(x,y)各单位时间,快的就赢了,当然,他们所用时间相等的话就是第一个人赢了(先手),
现在我们考虑这个"堵路"怎么用,我们想一想,如果第一个人快,那么第二个人一定堵不住他,第一个人也不用刻意去搞第二个人直接,直接走到终点就完了,如果第二个人快一些呢,那么其实第一个人是可以尝试"赌一赌"的,只要他的横纵坐标都比第二个人小(或者等),那么他就可以堵住可以理解成他们的水平或竖直分速度将会是相同的,他一定可以把第二个人拦下来,然后于是有:
如果第一个人的横纵坐标比第二个人都小(或等),那么第一个人无论如何都获胜,否则比较相互不影响时的最短时间.
代码:
#include <cstdio> #include <string> using namespace std; int main(){ int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d); if(a<=c&&b<=d) printf("Polycarp"); else{ int x=a+b; int y=max(c,d); if(x<=y) printf("Polycarp"); else printf("Vasiliy"); } return 0; }