原题网址:http://codeforces.com/contest/696/problem/C
假设交换i次后key在中间的概率为f(i),在左边的概率为g(i),因为左右两边等价,在右边的概率也为g(i)。所以g(i)=(1-f(i))/2。
f(i)=1/2g(i-1)+1/2g(i-1)=g(i-1)=(1-f(i-1))/2=-1/2f(i-1)+1/2
有了递推公式f(i)=-1/2f(i-1)+1/2,可以求出通项公式
设f(i)+λ=-1/2*(f(i-1)+(1/2+λ)/(-1/2))
λ=(1/2+λ)/(-1/2)
解得λ=-1/3
所以f(i)-1/3=-1/2(f(i-1)-1/3)
令h(i)=f(i)-1/3
则h(i)=-1/2h(i-1),h(0)=f(0)-1/3=2/3
h(i)=(2/3)*(-1/2)^i
f(i)=(2/3)*(-1/2)^i+1/3=[2^(i-1)+(-1)^i]/[3*2^(i-1)]
此时的分子是奇数,不能被因子2整除,但是否可以被3整除需要考虑。
考虑i-1=2n和i-1=2n+1(n为正整数)两种情况
首先2^1≡-1(mod 3) 2^2≡1(mod 3)
1’ i-1=2n
2^(i-1)+(-1)^i≡2^2n+(-1)^(2n+1)≡(2^2)^n-1≡1^n-1≡0 (mod 3)
2’ i-1=2n+1
2^(i-1)+(-1)^i≡2^(2n+1)+(-1)^2n≡(2^2)^n*2+1≡1^n*(-1)+1≡0 (mod 3)
所以分子能被3整除,所以取模之前要约分
x=(2^(i-1)+(-1)^i)*3^(p-2)
y=2^(i-1)
又因为题目给的i特别大,甚至以乘积表示,因为2^(p-1)≡1 (mod p),所以只要让i不断对(p-1)取模即可
const
p=1000000007;
q=1000000006;
var
n:longint;
k,f,t,ny:int64;
function ksm(d,k:int64):longint;
var
t,w,ans:int64;
begin
t:=d;w:=1;ans:=1;
while w<=k do
begin
if w and k>0
then ans:=(ans*t) mod p;
t:=(t*t) mod p;w:=w<<1;
end;
exit(ans);
end;
begin
readln(n);
k:=1;
repeat
read(t);dec(n);
k:=k*(t mod q) mod q;
until n=0;
if k=0 then k:=q;
if k and 1=0
then f:=1
else f:=-1;
t:=ksm(2,k-1);
ny:=ksm(3,p-2);
writeln((t+f)*ny mod p,'/',t);
end.