Description
给定两个长度为
n
n
的整数序列
l
l
和
t
t
,分别作为
n×n
n
×
n
矩阵
F
F
的第一列和第一行,并且保证
l1=t1
l
1
=
t
1
。同时矩阵中的任意其他元素
Fi,j
F
i
,
j
由以下递推给定:
给定系数 a,b, a , b , 要求计算 Fn,n F n , n 模 109+7 10 9 + 7 的值。
Input
第一行包含三个整数
n,a,b
n
,
a
,
b
。
第二行包含
n
n
个整数
li
l
i
。
第三行包含
n|
n
|
个整数
ti
t
i
。
Output
共一行包括一个整数,表示 Fn,n F n , n 模 109+7 10 9 + 7 的值。
Sample Input
4 3 5
4 1 7 3
4 7 4 8
Sample Output
59716
Data Constraint
n,a,b,li,ti≤100000 n , a , b , l i , t i ≤ 100000 。
Solution
可以看出,对于每项都有固定的曼哈顿距离到达终点,因此他们关于
a,b
a
,
b
的系数是固定的。
再者还要算出每一项到达终点的路径数。
所以对于每一项
ti
t
i
的贡献有
Cn−22n−i−2∗an−i∗bn−1
C
2
n
−
i
−
2
n
−
2
∗
a
n
−
i
∗
b
n
−
1
,
li
l
i
的贡献则类似。
Code
const mo=1000000007;
var n,i:longint;
ans,t,k,x,y:int64;
c,a,b,l,r:array[0..100005] of int64;
function ni(x:int64):int64;
var y,ans:int64;
begin
y:=mo-2;
ans:=1;
while y<>0 do begin
if y mod 2=1 then ans:=ans*x mod mo;
x:=x*x mod mo;
y:=y div 2;
end;
exit(ans);
end;
begin
readln(n,a[1],b[1]);
dec(n);
for i:=n downto 0 do read(r[i]);readln;
for i:=n downto 0 do read(l[i]);
k:=1;t:=1;
while k<n do begin
t:=t*k mod mo;
k:=k+1;
end;
x:=1;y:=t*n mod mo;
c[0]:=1;c[1]:=n;
for i:=2 to n-1 do begin
x:=x*i mod mo;
y:=y*(i+n-1) mod mo;
c[i]:=y*ni(t*x mod mo) mod mo;
end;
a[0]:=1;b[0]:=1;
for i:=2 to n do begin
a[i]:=a[i-1]*a[1] mod mo;
b[i]:=b[i-1]*b[1] mod mo;
end;
for i:=0 to n-1 do begin
ans:=(ans+c[i]*l[i] mod mo *a[i] mod mo*b[n] mod mo) mod mo;
ans:=(ans+c[i]*r[i] mod mo *a[n] mod mo*b[i] mod mo) mod mo;
end;
writeln(ans);
end.