资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
郭鸡是数学系里一个智商很低却十分好胜的同学。
自从他在“a+b problem”这道题里AC以后,他便觉得自己比贵系同学们厉害了。
于是他找到了你,发起了挑战,挑战内容就是一个叫取石子的游戏。
这个游戏里,首先会有两堆石子,分别有a和b粒石子。
两个人轮流操作,每次操作必须从其中一堆里取出一定粒数的石子(不能不取,可以取完)。
在有限次操作后,会有一个人把最后的石子取走(最后一次当然不一定是只取一粒),那个人就是胜利者。
由于郭鸡是自大的,于是他希望由你选择先取或后取。
作为一名优秀的酒井人,你要在这个游戏里彻底打败郭鸡,使游戏开始以后郭鸡没有任何机会获得胜利。
输入格式
输入共n+2行,第一行是一个整数n,表示郭鸡取石子次数。
第二行是两个正整数a和b,意义见题目描述。
下面n行,每行有两个整数,用空格隔开,表示郭鸡每次操作的堆号(1或2)及他取的石子数。
(注意:在游戏过程中,事实上你是不知道郭鸡接下来会怎么取的,所以我们要求你每一步操作都要保证郭鸡失败)
输入保证你能在他取完n次后的操作中获胜。
输出格式
输出有两种可能。
若你选择先取,则输出n+2行,第一行输出"Fisrt"表示先取,之后n+1行每一行是你每次操作的堆号(1或2)及取出的石子数。
若你选择后取,则输出n+1行,第一行输出"Second"表示后取,之后n行每一行是你每次操作的堆号(1或2)及取出的石子数。
"First"与"Second"的输出均不带引号。
样例输入
4
10 10
1 4
2 3
1 2
2 1
样例输出
Second
2 4
1 3
2 2
1 1
样例输入
1
1 2
1 1
样例输出
First
2 1
2 1
数据规模和约定
0<a,b<1000
一开始想不出来,后来突然想明白了。这不就是脑筋急转弯类的东西嘛
假如两个堆是一样的,那么你就等他拿,他拿了多少你就在隔壁堆拿多少,那么必然他会先拿完一堆,这个时候你就一定会把另一堆拿完,即拿走最后一个,
如果是不一样的你就先拿,把他拿成一样的堆
然后就转变为了第一种情况
#include<iostream>
using namespace std;
int main()
{
int n, a, b;
cin >> n >> a >> b;
if (a != b)
{
cout << "First" << endl;
if (a < b)
{
cout <<"2 " << b - a << endl;
}
else
{
cout << "1 " << a - b << endl;
}
}
else
{
cout << "Second" << endl;
}
for (int i = 0; i < n; i++)
{
int which, howmany;
cin >> which >> howmany;
switch (which)
{
case 1:
cout <<"2 " << howmany << endl;
break;
case 2:
cout << "1 " << howmany << endl;
break;
default:
break;
}
}
return 0;
}