码迷,mamicode.com
首页 > 其他好文 > 详细

【题解】CH Round #61 取数游戏

时间:2015-02-06 09:34:04      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:乱搞   数学   博弈   

取数游戏


CH Round #61 - 「Adera 10」冬令营热身赛

描述
SJY和CYF在玩一个取数游戏。他们将1~n分别写在n张纸上,随机排成一排,约定SJY先取,只能取走最边上的两张纸之一,然后CYF取;以此循环下去,取到1的人获胜。假设SJY和CYF足够聪明,求SJY获胜的概率。

输入
一个整数n

输出
SJY获胜的概率,保留最简分数形式(若为1,则输出1/1;若为0,则输出0/1)。

样例
样例输入1
2
样例输出1
1/1
样例输入2
3
样例输出2
2/3

数据范围与约定

40%的数据,0<n≤7。
70%的数据,0<n≤1000。
100%的数据,0<n≤1000000000。
样例2说明

共有1、2、3;1、3、2;2、1、3;2、3、1;3、1、2;3、2、1六种可能,其中第1、2、4、6种可能SJY获胜。

这道题是典型的数学题,可以直接寻找规律。首先根据题目说明,将7以内的情况都手算出来。1的时候是1,2的时候是1,3的时候是2/3,4的时候是1,5的时候是2/5,6的时候是1,7的时候是2/7。注意到,当n为偶数时概率为1,n为奇数是概率为2/n。这是不是一个普遍规律呢?数学证明这里略,我只说一下大体思路。
因为3和4好想,从3和4入手。
3的状态中有2/3为1在两端,此时为必胜状态,有1/3为1在两端,是必败状态,因为拿走一个后1一定会在两端。
4的状态中有1/2为1在两端,必胜,有1/2为1在中间,可以拿远离1的那一个数,使对方变成3中的必败状态*1*。
推测出当n为偶数时,要么直接拿走1,要么拿远离1的那一个,使对方变成必败状态,那么当n为偶数时必胜。
而当n为奇数时,除了1就在两端的情况,由于任意拿都不能拿到1,使对方成为偶数的必胜状态。
所以我们猜想的结论是完全正确的。
以后碰到这样的题,一定要先手算,然后敢猜敢写。

/*
Name:wxjlzbcd
Memory:1KB
Time:1ms
*/
#include<cstdio>
int n;
int main()
{
	int i;
	scanf("%d",&n);
	if(n==1)
		printf("1/1\n");
	else
		if(n&1)
			printf("2/%d\n",n);
		else
			printf("1/1\n");
	return 0;
}


【题解】CH Round #61 取数游戏

标签:乱搞   数学   博弈   

原文地址:http://blog.csdn.net/wxjlzbcd/article/details/43541723

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!