直接给出通项公式
P(n)表示n张花色牌Tomoyo赢的概率,则
也就是遍历下一轮夹在中间的数量的概率
即两张牌2!,另外n张牌n!种,中间夹着i张牌的种类数为n+1-i种
上面的式子可以进一步处理
令S(n)为P(0~n)的求和
两边减去S(n)右边又可以用P(n-1)表示
将P(n)换成S(n)-S(n-1)可得
求出
然后P(n)只要算S(n)-S(n-1)即可
t=int(input()) mod=998244353 import math for i in range(t): n=int(input()) if n==0: print(1) continue if n==1: print(0) continue a=10*n*(n*(n+6)+11)+36 b=18*(n+2)*(n+3) c=10*(n-1)*((n-1)*(n+5)+11)+36 d=18*(n+1)*(n+2) p=(a*d-b*c) q=b*d print(p*pow(q,mod-2,mod)%mod)直接通项公式版
#include<iostream>
#include<algorithm>
using namespace std;
long long mod=998244353;
int main()
{
int t;
long long n,p,q,x;
cin>>t;
while(t--)
{
cin>>n;
if(n==1)
{
cout<<0<<endl;
continue;
}
p=(5*n*n*n+30*n*n+55*n+54)%mod;
q=9*(n*n*n+6*n*n+11*n+6)%mod;
x=mod-2;
while(x)
{
if(x&1)
p=p*q%mod;
q=q*q%mod;
x>>=1;
}
cout<<p<<endl;
}
}

京公网安备 11010502036488号