51nod 1534 棋子游戏

来源:互联网 发布:如何网络人肉 编辑:程序博客网 时间:2024/05/21 09:01

对于v来说,一开始尽可能的斜着移动,直到遇到边界,或者被p拦截。一旦被p成功拦截那么v必输。

所以问题就变成了p能否成功拦截v。

即v移动的过程中,是否存在一个点,p也刚好,或提前到达这个点。

所以有两种情况:

1.v移动到xv=xp或yv=yp的时候,p成功或提前拦截。

2.v移动到边界后,进行水平或直线移动,直到xv=xp或yv=yp的时候,p提前或成功拦截。

可以看出,拦截点都在(0,0)与(xp,yp)作为对角的矩形的边界上(若能在其他点拦截,也必能在边界上拦截)。

进行分类讨论即可得出答案。

#include<bits/stdc++.h>using namespace std;int main(){long long xp,yp,xv,yv,tim;while(~scanf("%lld%lld%lld%lld",&xp,&yp,&xv,&yv)){tim=min(xv,yv);if(xv-tim<xp&&yv-tim<yp)tim=min(tim,max(max(yp-yv,xp-xv),0ll));xv-=tim;yv-=tim;if(xv==0){if(yv>yp){tim+=yv-yp;yv=yp;}} if(yv==0){if(xv>xp){tim+=xv-xp;xv=xp;}}tim-=max(xp-xv,0ll);tim-=max(yp-yv,0ll);if(tim<0)printf("Vasiliy\n");elseprintf("Polycarp\n");}}


0 0
原创粉丝点击