牛客第二场 A
你有n个点(0~n-1),按顺序形成一个环,初始时你在0的位子,你随机顺时针走一步或者逆时针走一步,
一旦你走到一个点后,环上所有点都被经过至少一次后,你就必须停下来。
问你最后停留在m这个位子的概率是多少。
你会发现落在0到n-1上的概率是相同的。。。。但是不会落在0位置处,所以加个判断 快速幂求分数幂就行了
结果输出的是前缀积。。。
#include <bits/stdc++.h> using namespace std; #define ll long long const ll mod = 1e9+7; ll pow_mod(ll a,ll b){ ll cnt=1; while(b){ if(b&1) cnt=cnt*a%mod; a=a*a%mod; b>>=1; } return cnt; } int main() { int t; ll m,n,ans = 1; cin>>t; while(t--) { scanf("%lld%lld",&n,&m); if(m == 0) { if(n>1) ans = 0; } else{ ans = ans*pow_mod(n-1,mod-2)%mod; } cout<<ans<<endl; } return 0; }