题意
t组测试,每行给n(代表n个点, 0 ,1,2 ....n-1),m。从0开始走,把n个点都走一遍结束。问在m点结束的概率是多少。输出前i个概率的积。
题解
除了0,在其他点结束的概率都是一样的。也就是(1/(n-1).
当n=1是,概率为1(因为只有一个点,0是起点也是终点)
否则,m=0时,概率为0(因为初始从0开始,所以走完一遍绝对不会停在0上)。
AC代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod = 1e9+7;
ll pown(ll a, ll b){ // 求逆元
ll res = 1;
while(b){
if(b&1){
res = (res * a) % mod;
}
a = (a * a) % mod;
b >>= 1;
}
return res;
}
int main(){
int t;
ll n, m, ans, res;
ans = 1; // ans 在外面初始化,因为是求前i个结果的积
scanf("%d", &t);
while(t--){
cin >> n >> m;
if (n == 1){ // 只有1个点
printf("%lld\n", ans);
}
else {
if(m == 0){
ans = 0;
}
else{
ans = ans * pown(n-1,mod-2) % mod;
}
printf("%lld\n", ans); // ans 不能在此处运算,不然会错
}
}
return 0;
}
探讨了在一个由n个点组成的旅程中,从点0出发并遍历所有点后,于特定点m结束的概率计算问题。通过分析,得出除了起始点0外,其余各点结束的概率相等,并提供了AC代码实现。
314

被折叠的 条评论
为什么被折叠?



