Matrix

Description

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

Fi,j=aFi,j1+bFi1,j F i , j = a ⋅ F i , j − 1 + b ⋅ F i − 1 , 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,ti100000 n , a , b , l i , t i ≤ 100000

Solution

可以看出,对于每项都有固定的曼哈顿距离到达终点,因此他们关于  ab    a , b   的系数是固定的。
再者还要算出每一项到达终点的路径数。
所以对于每一项  ti    t i   的贡献有  Cn22ni2anibn1   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.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值