zj与jmy玩游戏
8 | 11 |
通过 | 提交 |
题目描述
回答出zs问题的jmy,开心的找到zj说道他和zs玩游戏的过程,zj表示你这么厉害,那咱们也来玩玩石头剪刀布的游戏?jmy同意了。了解zj具有观星象的占卜能力的jmy提出了新的要求,咱们玩石头剪刀布游戏要现在就开始不能等到明天。zj同意了,但是为了增加难度,提出每轮要在纸上随机先写出n个字符只包含"SRC"(表示剪刀石头布),然后一起展示出自己写好的字符,各个位置对应,只有jmy赢了大于一半,这一轮才算jmy赢。只要jmy能够赢zj一轮,游戏就结束。聪明的你能不能帮jmy计算出游戏持续轮数的期望。
输入格式
第一行包含整数T,表示多组测试。(1<=T<=10)
接下来T行,每行包含一个整数n,表示一次性在纸上随机写下的字符个数。(1<=n<=105)
输出格式
对于每组测试,输出当一轮游戏要输出n个字符的时候,这个游戏能够持续的轮数的期望,答案对1000000007取模。
样例输入 #1
3 1 2 3
样例输出 #1
3 9 857142867
提示
mod=1000000007。
我们将整数的除法在取模意义下定义为p/q=p*q的逆元%mod(q的逆元为q^(mod-2)),不难发现这样的定义对于原来的交换律结合律等运算律同样适用。
假设期望是p/q,那么输出p*q的逆元,也就是说输出p*q^(mod-2)%mod。
该题可能要用到以下快速幂函数,计算a^b%mod。
typedef long long ll;
ll qpow(ll a,ll b,ll mod)//a是底数,b是指数,mod是模数
{
ll ans=1;
while(b)
{
if(b%2)ans=ans*a%mod;
a=a*a%mod;
b/=2;
}
return ans;
}
比如1/2=1*qpow(2,mod-2,mod)%mod=500000004
样例3中是27/7
假设n!=fac[n](mod 1e9+7)
那么组合数
C(n,m)=fac[n]*qpow(fac[m],mod-2)*qpow(fac[n-m],mod-2)
来源
Author zj