Matrix

时间限制: 1 Sec  内存限制: 512 MB

题目描述

小 z 的女朋友送给小 z 一个 n × n 的矩阵。但是矩阵实在太大了,小 z 的女朋友拿不动,只能带给他两个长度为 n 的整数序列 l, t ,分别作为矩阵 F 的第一行和第一列(保证 l1 = t1 ),并且告诉小 z 矩阵可以通过如下方式得到:
Fi,j = a · Fi,j−1 + b · Fi−1,j
现在小 z 猜到了系数 a,b ,他想要计算 Fn,n 模 109 + 7 的值

输入

第一行三个整数 n, a, b.
第二行 n 个数表示 l.
第三行 n 个数表示 t

输出

一行一个整数表示答案    

样例输入

4 3 5
4 1 7 3
4 7 4 8

样例输出

59716

提示

对于前 40% 的数据,n ≤ 5000;
对于另外 20% 的数据,a = 0;
对于 100% 的数据,n, a, v, li, ti ≤ 105

  分析:

   大力推公式。

  反正就从给定的公式下手,可以推出$f[n][n]$与$f[1][1\thicksim n]$和$f[1\thicksim n][1]$的关系,当然很显然需要用到组合。

  实际上,$f[n][n]$只由$f[1][1\thicksim n]$和$f[1\thicksim n][1]$中的元素得到,并且从$f[1][1\thicksim n]$和$f[1\thicksim n][1]$的任一元素转移到$f[n][n]$的转移方式都是唯一的,这里推导过程就不再写了,直接写出结论:

$f[n][n]=\sum^n_{i=1}(f[1][i]*a^{n-1}*b^{n-i}*C^{n*2-i-2}_{n-2})+\sum^n_{i=1}(f[i][1]*a^{n-i}*b^{n-1}*C^{n*2-i-2}_{n-2})$

  Code:

//It is made by HolseLee on 25th Oct 2018
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define mod (1000000007)
using namespace std; typedef long long ll;
const ll N=2e5+;
ll n,tot,A,B,x[N],y[N],a[N],b[N],aa[N],bb[N],ans; inline ll read()
{
char ch=getchar(); ll num=; bool flag=false;
while( ch<'' || ch>'' ) {
if( ch=='-' ) flag=true; ch=getchar();
}
while( ch>='' && ch<='' ) {
num=num*+ch-''; ch=getchar();
}
return flag ? -num : num;
} void ready()
{
tot=(n-)<<;
a[]=a[]=b[]=b[]=; aa[]=bb[]=, aa[]=A, bb[]=B;
for(ll i=; i<=tot; ++i) b[i]=b[i-]*i%mod;
for(ll i=; i<=tot; ++i) a[i]=(mod-mod/i)*a[mod%i]%mod;
for(ll i=; i<=tot; ++i) a[i]=a[i]*a[i-]%mod;
for(ll i=; i<=n; ++i) aa[i]=aa[i-]*A%mod;
for(ll i=; i<=n; ++i) bb[i]=bb[i-]*B%mod;
} inline ll getx(ll i)
{
ll ret=x[i]*aa[n-]%mod*bb[n-i]%mod;
ret=ret*b[tot-i+]%mod*a[tot-n-i+]%mod*a[n-]%mod;
return ret;
} inline ll gety(ll i)
{
ll ret=y[i]*bb[n-]%mod*aa[n-i]%mod;
ret=ret*b[tot-i+]%mod*a[tot-n-i+]%mod*a[n-]%mod;
return ret;
} int main()
{
n=read(); A=read(), B=read();
ready();
for(ll i=; i<=n; ++i) x[i]=read();
for(ll i=; i<=n; ++i) y[i]=read();
for(ll i=; i<=n; ++i) {
ans=(ans+getx(i))%mod;
}
for(ll i=; i<=n; ++i) {
ans=(ans+gety(i))%mod;
}
printf("%lld\n",ans);
return ;
}

Noip模拟题 Matrix [递推,组合数]的更多相关文章

  1. 2018.10.09 NOIP模拟 路途(递推+矩阵快速幂优化)

    传送门 签到题.(考试的时候写挂爆0) 令AiA_iAi​表示邻接矩阵的iii次幂. 于是就是求Al+Al+1+...+ArA_l+A_{l+1}+...+A_rAl​+Al+1​+...+Ar​. ...

  2. NOIP模拟题汇总(加厚版)

    \(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...

  3. 【入门OJ】2003: [Noip模拟题]寻找羔羊

    这里可以复制样例: 样例输入: agnusbgnus 样例输出: 6 这里是链接:[入门OJ]2003: [Noip模拟题]寻找羔羊 这里是题解: 题目是求子串个数,且要求简单去重. 对于一个例子(a ...

  4. 9.9 NOIP模拟题

    9.9 NOIP模拟题 T1 两个圆的面积求并 /* 计算圆的面积并 多个圆要用辛普森积分解决 这里只有两个,模拟计算就好 两圆相交时,面积并等于中间两个扇形面积减去两个三角形面积 余弦定理求角度,算 ...

  5. 8.22 NOIP 模拟题

      8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...

  6. noip模拟题题解集

    最近做模拟题看到一些好的题及题解. 升格思想: 核电站问题 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定 ...

  7. 一种递推组合数前缀和的Trick

    记录一下一种推组合数前缀和的方法 Trick 设\(\sum_{i = 0}^m C_n^i = S(n, m)\) \(S\)是可以递推的 \(S(n, m + 1) = S(n, m) + C_{ ...

  8. bzoj3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛——递推 / 组合数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3398 对于这种有点巧妙的递推还是总是没有思路... 设计一个状态 f[i] 表示第 i 位置 ...

  9. NOIP模拟题17.9.26

    B 君的任务(task)[题目描述]与君初相识,犹如故人归.B 君看到了Z 君的第一题,觉得很难.于是自己出了一个简单题.你需要完成n 个任务,第i 任务有2 个属性ai; bi.其中ai 是完成这个 ...

随机推荐

  1. JS对象中的原型

    对象的原型:每个对象都连接一个原型对象,并且它可以从中继承属性.所有通过对象字面量创建的对象都连接到object.prototype.当你创建一个新对象时,你可以选择某个对象作为它的原型.原型连接在更 ...

  2. asp.net(C#)中 DataTime 赋空值的研究

    SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究 在SqlServer 2000中datetime 的空值即默认值为1900-01-01 00:00:00,C#中 ...

  3. 俞昆20155335《网络对抗》MSF基础应用

  4. C语言入门教程-(4)常量和变量

    1.常量和变量的概念 程序执行过程中其值不能发生改变的量叫做常量,其值能发生改变的量叫做变量.常量可以直接使用,而变量则必须先定义后才能使用,否则编译器会报错. 2.常量和变量的命名规范 在介绍常量和 ...

  5. [译] 用HTML5捕获音频和视频

    原文地址:http://www.html5rocks.com/en/tutorials/getusermedia/intro/ 概述 有了HTML5,我们就可以在不借助Flash或者Silverlig ...

  6. [转]CNN目标检测(一):Faster RCNN详解

    https://blog.csdn.net/a8039974/article/details/77592389 Faster RCNN github : https://github.com/rbgi ...

  7. java所搜引擎slor学习笔记(一)

    java搜索引擎有很多,比较熟悉的就是slor和lucene. luncene: 概念:全文检索是计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置.当用户查 ...

  8. 使用纯注解与配置类开发springMVC项目,去掉xml配置

    最近拜读了杨开振老师的书,深入浅出springBoot2.x,挖掘了很多以前被忽略的知识, 开发一年多,工作中一直用传统springmvc的开发,基本都还是用的传统的xml配置开发, 看到书里有提到, ...

  9. aarch64_n1

    NFStest-2.1.5-0.fc26.noarch.rpm 2017-02-17 01:19 531K fedora Mirroring Project NLopt-2.4.2-11.fc26.a ...

  10. 21 JSON and Go go语言和json

    JSON and Go 25 January 2011 Introduction JSON (JavaScript Object Notation) is a simple data intercha ...