• 【博弈论】51Nod 1534 棋子游戏


    题目内容

    波雷卡普和瓦西里喜欢简单的逻辑游戏。今天他们玩了一个游戏,这个游戏在一个很大的棋盘上进行,他们每个人有一个棋子。他们轮流移动自己的棋子,波雷卡普先开始。每一步移动中,波雷卡普可以将他的棋子从((x,y)) 移动到((x-1,y)) 或者((x,y-1)) 。而瓦西里可以将他的棋子从((x,y)) 移动到((x-1,y)) ,((x-1,y-1)) 或者((x,y-1)) 。当然他们可以选择不移动。
    还有一些其它的限制,他们不能把棋子移动到(x)(y)为负的座标,或者移动到已经被对手占据的座标。最先到((0,0))的人获胜。
    现在给定他们棋子的座标,判断一下谁会获胜。

    输入格式

    单组测试数据。第一行包含四个整数(xp,yp,xv,yv(0≤xp,yp,xv,yv≤10^5)),表示波雷卡普和瓦西里棋子的座标。输入保证他们的棋子在不同位置,而且没有棋子在((0,0))

    输出格式

    如果波雷卡普获胜,输出Polycarp,否则输出Vasiliy

    样例输入

    2 1 2 25

    样例输出

    Polycarp

    思路

    波雷卡普能否取胜就看能不能截住瓦雷西走对角线的路径,或者瓦雷西完全走对角线的最短距离还是大于等于波雷卡普的路径长度。前一种情况只要满足波雷卡普的坐标在第二个人左下角即可。后一种情况,波雷卡普的最少步数是(x+y),因为瓦雷西可以斜着走所以最少步数是(max(x,y))。注意当步数相等时是Polycarp获胜,因为波雷卡普先走。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){
    	int xp,yp,xv,yv;
    	scanf("%d%d%d%d",&xp,&yp,&xv,&yv);
    	if((xp<=xv&&yp<=yv)||max(xv,yv)>=xp+yp)
    		puts("Polycarp");
    	else puts("Vasiliy");
    	return 0;
    }
    
  • 相关阅读:
    今天才明白VC++.net的含义: VS系列的c++编译器可以支持托管C++(类似于C#,具体请看MS在线文档),当然包括winform界面开发。
    转:ArcEngine10.0+VS2010+MFC 扫盲贴 .
    在Arcmap中加载互联网地图资源的4种方法
    JSON Web Token
    介子 官网
    Spring read-only="true" 只读事务的
    idea 修改 使用的git账号
    Redis原子计数器incr
    mysql where执行顺序
    GitLab 汉化
  • 原文地址:https://www.cnblogs.com/Midoria7/p/12989397.html
Copyright © 2020-2023  润新知