4396.取石子
两个小朋友玩取石子游戏。
第一个小朋友面前有 n1个石子,第二个小朋友面前有 n2 个石子。
两人轮流取自己面前的石子。
第一个小朋友先手,第二个小朋友后手。
第一个小朋友每轮次最多取 k1 个石子,最少取 1 个石子。
第二个小朋友每轮次最多取 k2 个石子,最少取 1个石子。
率先取完自己面前石子的小朋友,视为失败。
请问,两个小朋友都采取最优策略的情况下,谁会获胜?
输入格式
一行,四个整数 n1,n2,k1,k2
输出格式
如果第一个小朋友获胜,则输出 First
,如果第二个小朋友获胜,则输出 Second
。
数据范围
所有测试点满足 1≤n1,n2,k1,k2≤50
输入样例1:
2 2 1 2
输出样例1:
Second
输入样例2:
2 1 1 1
输出样例2:
First
根据题意我们可以知道,要采用最优策略,最优策略是什么呢?就是谁也不让谁,打的最久,要想时间最长不就是一个一个的拿吗?所以k1和k2完全是来误导我们的,k1和k2在程序中不会被用到,只要装个样子输入就对了。
代码:
#include <iostream>
using namespace std;
int main()
{
int n1,n2,k1,k2;
cin>>n1>>n2>>k1>>k2;
while(n1!=0&&n2!=0)
{
n1-=1;
n2-=1;
}
if(n1==0)
cout<<"Second"<<endl;
else if(n2==0)
cout<<"First"<<endl;
}
一个while循环来判断哪个小朋友的石子先变为0,则对面小朋友获胜,是不是很简单,简直是一道送分题。