题目大意
N N N个人排成一圈,按顺时针顺序标号为 1 − N 1 - N 1−N,每次随机一个 1 − N 1 - N 1−N的编号
假设随机到的编号是 X X X,如果编号为 X X X人还未踢出,则将这个人踢出,否则看编号为 X X X% N + 1 N+1 N+1(即顺时针顺序下一个编号)的人是否存活,如果还未踢出则将他踢出,否则继续看编号 ( X + 1 ) (X + 1) (X+1)% N + 1 N +1 N+1的人,如果已被踢出看顺时针的下一个…………
以此类推,直到踢出一个人为止。重复上述操作,直到剩下 K K K个人。
已知小 S S S的编号是 I d Id Id,问按照小 S S S的方法来他有多少的概率可以不被踢出,成功得到看电影的机会。
题目解析
因为在环上每个人的位置和条件均相同,而且前往看电影的总人数为 K K K
那么意味着所有人前往看电影的概率和为 K K K
根据以上条件可以得到答案为 K / N K/N K/N
注意约分和 0 0 0 的细节即可
代码
#include<bits/stdc++.h>
using namespace std;
int n,m,id,t;
int find(int x,int y)
{
int s=x%y;
while(s!=0)
{
x=y;
y=s;
s=x%y;
}
return y;
}
int main()
{
cin>>n>>m>>id;
if(m==0)
{
cout<<"0/1";
return 0;
}
t=find(n,m);
cout<<m/t<<"/"<<n/t;
}