CF197A Plate Game

题目描述

你有一个长方形的桌子,长度 a ,宽度 b ,以及无限多的半径 r的圆盘。

两位玩家玩以下游戏:他们轮流把圆盘放在桌子上,使得盘子之间不能互相重叠(但他们的边缘可以互相接触),任何盘子上的任何点都位于桌子的边界内(也就是盘子的任意一部分不能悬空)。在比赛中,人们不能移动已经摆在桌子上的盘子。不能再往桌子上合法的摆圆盘的玩家输。

你的任务是确定哪个玩家赢了,先放圆盘的玩家称为“First”,后放圆盘的玩家称为“Second”,当然两个球员都发挥得最好。

输入输出样例

输入 #1
5 5 2
输出 #1
First
输入 #2
6 7 4
输出 #1
Second

解题思路

简单的博弈论

我们的策略是,若First能放,则我们后面根据Second对称着放,感性理解一下一定是First win

AC Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
inline int read(){
    char c=getchar();
    int x=0,f=1;
    while(c<'0'||c>'9'){
        if(c=='-')f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9'){
        x=x*10+c-'0';
        c=getchar();
    }
    return x*f;
}
int a,b,r;
int main(){
    a=read();
    b=read();
    r=read();
    if(2*r<=a&&2*r<=b)cout<<"First"<<endl,exit(0);
    else return cout<<"Second"<<endl,0;
}
View Code
原文地址:https://www.cnblogs.com/Larry-Zero/p/11739797.html