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

取数游戏

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;
}
时间: 2024-10-13 00:14:31

【题解】CH Round #61 取数游戏的相关文章

[CH Round #61] 取数游戏

描述 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%的数据

题解【luogu2045 方格取数游戏加强版】

Description 给出一个 \(n*n\) 的矩阵,每一格有一个非负整数 \(A_{i,j}\) ,(\(A_{i,j} <= 1000\))现在从 \((1,1)\) 出发,可以往右或者往下走,最后到达 \((n,n)\) ,每达到一格,把该格子的数取出来,该格子的数就变成 \(0\) ,这样一共走 \(K\) 次,现在要求 \(K\) 次所达到的方格的数的和最大 Solution 一条边 \((a,b)\) 表示容量为 \(a\) ,费用为 \(b\) . 把每个点拆成两个点,入点和出

洛谷 P1005 矩阵取数游戏 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1005 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2.每次取走的各个元素只能是该元素所在行的行首或行尾: 3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元

Noip2007矩阵取数游戏题解

题目描述 Description [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n?m的矩阵,矩阵中的每个元素ai,j均 为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 每次取走的各个元素只能是该元素所在行的行首或行尾: 每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分=被取走的元素值?2i, 其中i表示第i 次取数(从1 开始编号): 游戏结束总得分为m次取数得分之和. 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出

【日常学习】【区间DP+高精】codevs1166 矩阵取数游戏题解

题目来自NOIP2007TG3 如果在考场上我现在已经歇菜了吧 今天一整天的时间全部投在这道题上,收获不小. 先上题目 题目描述 Description [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m 的矩阵,矩阵中的每个元素aij均 为非负整数.游戏规则如下: 1. 每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. 每次取走的各个元素只能是该元素所在行的行首或行尾: 3. 每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分= 被取走的元素

BZOJ1978: [BeiJing2010]取数游戏 game

1978: [BeiJing2010]取数游戏 game Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 650  Solved: 400[Submit][Status] Description 小 C 刚学了辗转相除法,正不亦乐乎,这小 P 又出来捣乱,给小 C 留了个 难题. 给 N 个数,用 a1,a2…an来表示.现在小 P 让小 C 依次取数,第一个数可以 随意取.假使目前取得 aj,下一个数取ak(k>j),则ak必须满足gcd(aj,a

矩阵取数游戏

题目描述 Description [问题描述]帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m 的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下:1. 每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素:2. 每次取走的各个元素只能是该元素所在行的行首或行尾:3. 每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分= 被取走的元素值*2i,其中i 表示第i 次取数(从1 开始编号):4. 游戏结束总得分为m次取数得分之和.帅帅想请你帮忙写一个程序,对于任意矩

NOIP2007 矩阵取数游戏

题目描述 Description [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m 的矩阵,矩阵中的每个元素aij均 为非负整数.游戏规则如下: 1. 每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. 每次取走的各个元素只能是该元素所在行的行首或行尾: 3. 每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分= 被取走的元素值*2i, 其中i 表示第i 次取数(从1 开始编号): 4. 游戏结束总得分为m次取数得分之和. 帅帅想请你帮忙写一个

BZOJ 1978 取数游戏(DP)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1978 题意:给出一个数列a,在其中找出下标依次增大的数,使得任意相邻的两个数的最大公约数大于等于m.找出最多的数字. 思路:f[i]表示前面的数字中最大公约数为i可以找出的最多的数字个数.那么对于当前数字x: 接着更新f: int f[N],a[N]; int n,m; int main() { RD(n,m); int i; FOR1(i,n) RD(a[i]); int j,k;