Matrix

来源:互联网 发布:天子网络 编辑:程序博客网 时间:2024/05/17 23:36

Description

给定两个长度为 n 的整数序列 l  t ,分别作为 n×n 矩阵 F 的第一列和第一行,并且保证 l1=t1 。同时矩阵中的任意其他元素 Fi,j 由以下递推给定:

Fi,j=aFi,j1+bFi1,j

给定系数 a,b, 要求计算 Fn,n  109+7 的值。

Input

第一行包含三个整数 n,a,b
第二行包含 n 个整数 li
第三行包含 n|个整数 ti

Output

共一行包括一个整数,表示 Fn,n  109+7 的值。

Sample Input

4 3 5
4 1 7 3
4 7 4 8

Sample Output

59716

Data Constraint

n,a,b,li,ti100000

Solution

可以看出,对于每项都有固定的曼哈顿距离到达终点,因此他们关于 ab 的系数是固定的。
再者还要算出每一项到达终点的路径数。
所以对于每一项 ti 的贡献有 Cn22ni2anibn1, li  的贡献则类似。

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.
1 0
原创粉丝点击