试题 算法训练 智斗郭鸡

提交此题   评测记录  

资源限制

内存限制: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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值