2013-11-17 10:38
原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1008
比较水的题,直接矩阵乘法+递推就OK了
w[i,0]代表i个人不越狱的方案,
w[i,1]代表i个人越狱的方案,
那么有
w[i,1]:=w[i-1,0]+w[i-1,1]*m;
w[i,0]:=w[i-1,0]*(m-1);
然后用矩阵乘法加速。
然后我们可以发现,w[i,0]就是(m-1)^(i-2)*m
那么n个人,一共有n^m种方案,减去w[n,0]就好了
那么式子就是ans=m^n-m*(m-1)^(n-2)
//By BLADEVIL const d39 =100003; type rec =array[0..2,0..2] of int64; var n, m :int64; p :int64; ans, sum :rec; w :int64; function mul(a,b:rec):rec; var i, j, k :longint; begin fillchar(mul,sizeof(mul),0); for i:=1 to 2 do for j:=1 to 2 do for k:=1 to 2 do mul[i,j]:=mul[i,j]+(a[i,k]*b[k,j]) mod d39; end; begin read(m,n); if n=1 then begin writeln(0); halt; end; ans[1,1]:=1; ans[2,2]:=1; sum[1,1]:=m-1; sum[1,2]:=1; sum[2,2]:=m; p:=n-2; while p<>0 do begin if p mod 2=1 then ans:=mul(ans,sum); p:=p div 2; sum:=mul(sum,sum); end; w:=((ans[1,2]*((m*m-m) mod d39) mod d39)+(ans[2,2]*m mod d39))mod d39; writeln(w); end.