看电影
1s/256MB
【问题描述】
听说 NOIP2016 大家都考得不错,于是 CCF奖励省常中了 K张变形金刚 5 的电影票奖励OI队的同学去看电影。可是省常中 OI队的同学们共有 N(N ≥ K)人。于是机智的你想到了一个公平公正的方法决定哪 K 人去看电影。
N 个人排成一圈,按顺时针顺序标号为1 - N,每次随机一个还存活的人的编号,将这个人踢出。继续上述操作,直到剩下 K 个人。
但这样显然太无聊了,于是小 S 又想出一个牛逼的方法。
N 个人排成一圈,按顺时针顺序标号为 1 - N,每次随机一个 1 - N的编号,假设随机到的编号是 X,如果编号为 X 人还未踢出,则将这个人踢出,否则看编号为 X % N + 1(即顺时针顺序下一个编号)的人是否存活,如果还未踢出则将他踢出,否则继续看编号(X + 1)% N + 1的人,如果已被踢出看顺时针的下一个…………,以此类推,直到踢出一个人为止。重复上述操作,直到剩下 K 个人。
已知小 S 的编号是 Id,问按照小 S 的方法来他有多少的概率可以不被踢出,成功得到看电影的机会。
【输入格式】
第一行包括三个正整数,N,K,Id(1≤ K ≤ N ≤ 109, 1 ≤ Id ≤ N )
【输出格式】
一行一个最简分数,表示小 S 可以看到电影的概率。
(如果概率为 1 或 0,请输出 1/1 或 0/1)
【输入样例】
2 1 2
【输出样例】
1/2
【样例解释】
一共两个人,筛选经过 1 轮,第1 轮每个人被踢出的概率都是等概率的,所以答案是
1/2。
【数据规模】
所有测试数据范围和特点如下
测试点编号 | N | 特别约定 |
1 |
≤ 2 |
保证这两个数据的 K 互不相同 |
2 | ||
3 |
≤ 3 |
|
4 | K = 1 | |
5 | ≤ 5 |
|
6 | ≤ 15 | K=N |
7 | ≤ 60 | K=0 |
8 | ≤ 250 |
|
9 |
≤ 109 | Id=1 |
10 |
|
题解:这题虽然看起来比较麻烦,但仔细一想可以发现每个人的概率是相等的,所以答案就是K/N,求gcd约分即可。
Code: