题目链接:https://ac.nowcoder.com/acm/contest/882/A
思路:模拟一遍会发现落在所有可能的点上的概率是均等的
(
p
=
1
n
−
1
)
\left({p=\frac{1}{n-1}}\right)
(p=n−11),在特判
{
n
=
=
1
}
\lbrace{n==1}\rbrace
{n==1}和
{
m
=
=
0
}
\lbrace{m==0}\rbrace
{m==0}的情况就
o
k
{ok}
ok了。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
ll qpow(ll x,ll y)
{
ll ans=1;
while(y){
if(y&1)
ans=ans*x%mod;
x=x*x%mod;
y>>=1;
}
return ans;
}
int main()
{
int t;
ll n,m;
cin>>t;
ll ans=1;
while(t--)
{
cin>>n>>m;
if(n==1)//环的长度为1的话结果可能性为1
cout<<ans<<"\n";
else{
if(m==0)//走完所有点后,最后落在m点上,这个点肯定不是0
ans=0;
else
ans=ans*qpow(n-1,mod-2)%mod;//每次走,最后落在m点的概率都为1/(n-1);
cout<<ans<<"\n";
}
}
return 0;
}
/*
3
1 0
2 1
3 0
*/