3157: 国王奇遇记 & 3516: 国王奇遇记加强版 - BZOJ

果然我数学不行啊,题解君: http://www.cnblogs.com/zhuohan123/p/3726933.html

 

 1 const
 2     h=1000000007;
 3 var
 4     fac,facinv,powm,s:array[0..1100]of int64;
 5     n,m:int64;
 6 
 7 function mexp(a,b:int64):int64;
 8 begin
 9     if b=0 then exit(1);
10     mexp:=sqr(mexp(a,b>>1))mod h;
11     if b and 1=1 then mexp:=mexp*a mod h;
12 end;
13 
14 function C(n,r:int64):int64;
15 begin
16     exit((fac[n]*facinv[r] mod h)*facinv[n-r] mod h);
17 end;
18 
19 procedure main;
20 var
21     i,j:longint;
22 begin
23     read(n,m);
24     if m=1 then
25     begin
26       write((n*(n+1)div 2)mod h);
27       exit;
28     end;
29     fac[0]:=1;
30     for i:=1 to m do
31       fac[i]:=fac[i-1]*i mod h;
32     facinv[m]:=mexp(fac[m],h-2);
33     facinv[0]:=1;
34     for i:=m-1 downto 1 do
35       facinv[i]:=facinv[i+1]*(i+1)mod h;
36     powm[0]:=1;
37     for i:=1 to m do
38       powm[i]:=-powm[i-1];
39     s[0]:=((mexp(m,n+1)-m+h)mod h)*mexp(m-1,h-2)mod h;
40     for i:=1 to m do
41       begin
42         s[i]:=mexp(n,i)*mexp(m,n+1)mod h;
43         for j:=0 to i-1 do
44           s[i]:=(s[i]+powm[i-j]*(C(i,j)*s[j]mod h)+h)mod h;
45         s[i]:=s[i]*mexp(m-1,h-2)mod h;
46       end;
47     write(s[m]);
48 end;
49 
50 begin
51     main;
52 end.
View Code

 

转载于:https://www.cnblogs.com/Randolph87/p/3739744.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值