弱省高二老年划水选手在此!!!!!!!!(目前已退役)

Ryan_

Every thing that kills me makes me feel alive.

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

 

posted @ 2019-10-25 19:07  Ryan_zero  阅读(125)  评论(0编辑  收藏  举报