看电影

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:

var
n,k,d,p:longint;
function gcd(a,b:longint):longint;
begin
if b=0 then exit(a);
gcd:=gcd(b,a mod b);
end;
begin
assign(input,'movie.in');reset(input);
assign(output,'movie.out');rewrite(output);
readln(n,k,d);
p:=gcd(n,k);
writeln(k div p,'/',n div p);
close(input);close(output);
end.