题目描述
​ 听说 NOIP2019 模拟赛大家都考得不错,于是胡船长奖励了 K 张的电影票奖励 OI 队的同学去看电影。可是 OI 队的同学们共有 N(N≥K) 人。于是机智的你想到了一个公平公正的方法决定哪 K 人去看电影。

N 个人排成一圈,按顺时针顺序标号为 1−N,每次随机一个还存活的人的编号,将这个人踢出。继续上述操作,直到剩下 K 个人。

但这样显然太无聊了,于是你又想出一个牛逼的方法。

N 个人排成一圈,按顺时针顺序标号为 1−N,每次随机一个 1−N 的编号,假设随机到的编号是 X,如果编号为 X 人还未踢出,则将这个人踢出,否则看编号为 X%N+1(即顺时针顺序下一个编号)的人是否存活,如果还未踢出则将他踢出,否则继续看编号 (X+1)%N+1 的人,如果已被踢出看顺时针的下一个…………,以此类推,直到踢出一个人为止。重复上述操作,直到剩下 K 个人。

已知你的编号是 Id,问按照你的方法来你有多少的概率可以不被踢出,成功得到看电影的机会。

输入
​ 第一行包括三个正整数 N,K,Id。(1≤K≤N≤10,1≤Id≤N)
输出
​ 一行一个最简分数,表示你可以看到电影的概率。(如果概率为 1 或 0,请输出 1/1 或 0/1)

样例输入
2 1 2
样例输出
1/2
样例说明
​ 一共两个人,筛选经过 1 轮,第 1 轮每个人被踢出的概率都是等概率的,所以答案是 1/2。

数据规模与约定
​ 时间限制:1 s

内存限制:256 M

100% 的数据保证 1≤K≤N≤10,1≤Id≤N

#include <iostream>
using namespace std;

int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}

int main() {
int n, k, id;
cin >> n >> k >> id;
if (n == k) {
cout << "1/1" << endl;
return 0;
}
if (k == 0) {
cout << "0/1" << endl;
return 0;
}
int t = gcd(n, k);
cout << k / t << "/" << n / t << endl;
return 0;
}