题目

预处理转移矩阵的\(2^k\)。

然后把关键点按下标排序。

每次用类似于矩阵快速幂的方法求出两个关键点中间的转移矩阵。

#include<bits/stdc++.h>
using namespace std;
const int N=107,P=1000000007;
int read(){int x=0,c=getchar();while(!isdigit(c))c=getchar();while(isdigit(c))x=x*10+c-48,c=getchar();return x;}
int inc(int a,int b){a+=b;return a>=P? a-P:a;}
int mul(int a,int b){return 1ll*a*b%P;}
int max(int a,int b){return a>b? a:b;}
int n,m,q,lim,t,f[N],c[N],C[N];
struct node{int n,t,c[N];}p[N];
int operator<(node a,node b){return a.n<b.n;}
struct mat
{
int a[N][N],n,m;
int*operator[](int x){return a[x];}
void clear(){memset(a,0,sizeof a);}
void init(){clear();for(int i=1;i<=n;++i)a[i][i]=1;}
}A[31],F;
mat operator*(mat a,mat b)
{
mat c;c.clear(),c.n=a.n,c.m=b.m;int i,j,k;
for(i=1;i<=a.n;++i) for(j=1;j<=b.m;++j) for(k=1;k<=a.m;++k) c[i][j]=inc(c[i][j],mul(a[i][k],b[k][j]));
return c;
}
void init()
{
A[0].clear(),F.clear(),A[0].n=A[0].m=F.m=lim,F.n=1;int i,j;
for(i=1;i<A[0].n;++i) A[0][i][i+1]=1;
for(i=1;i<=t;++i) A[0][i][1]=c[i-1];
for(i=1;1<<i<=n;++i) A[i]=A[i-1]*A[i-1];
for(i=1,j=m;i<=lim&&j;++i,--j) F[1][i]=f[j];
}
void power(int k){for(int i=0;i<31;++i)if(k&1<<i)F=F*A[i];}
int main()
{
int T=0,i,j,now,ans;
while(scanf("%d%d%d",&n,&m,&q)!=EOF)
{
for(i=1;i<=m;++i) f[i]=read();
lim=t=read();
for(i=0;i<t;++i) c[i]=read();
for(i=1;i<=q;++i)
{
p[i].n=read(),p[i].t=read();
if(p[i].n<=n) lim=max(lim,p[i].t);
for(j=1;j<=p[i].t;++j) p[i].c[j]=read();
}
sort(p+1,p+q+1),init(),now=m;
for(i=1;i<=q;++i)
{
if(p[i].n<=now||p[i].n>n) continue;
for(j=1;j<=p[i].t;++j) C[j]=p[i].c[j];
power(p[i].n-now-1),now=p[i].n,ans=0;
for(j=1;j<=p[i].t;++j) ans=inc(ans,mul(C[j],F[1][j]));
for(j=lim;j^1;--j) F[1][j]=F[1][j-1];
F[1][1]=ans;
}
power(n-now),printf("Case %d: %d\n",++T,F[1][1]);
}
}

HDU4471 Homework的更多相关文章

  1. 【HDU4471】Homework(矩阵快速幂)

    [HDU4471]Homework(矩阵快速幂) 题面 Vjudge 给定一个数列的前\(m\)项,给定一个和前\(t\)项相关的递推式. 有\(q\)个位置的递推式单独给出,求数列第\(n\)项. ...

  2. bzoj 4320: ShangHai2006 Homework

    4320: ShangHai2006 Homework Time Limit: 10 Sec Memory Limit: 128 MB Description 1:在人物集合 S 中加入一个新的程序员 ...

  3. HDU 1789 Doing Homework again(贪心)

    Doing Homework again 这只是一道简单的贪心,但想不到的话,真的好难,我就想不到,最后还是看的题解 [题目链接]Doing Homework again [题目类型]贪心 & ...

  4. hdu-1789-Doing Homework again

    /* Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...

  5. HDU 1789 Doing Homework again (贪心)

    Doing Homework again http://acm.hdu.edu.cn/showproblem.php?pid=1789 Problem Description Ignatius has ...

  6. Doing Homework 状态压缩DP

    Doing Homework 题目抽象:给出n个task的name,deadline,need.  每个任务的罚时penalty=finish-deadline;   task不可以同时做.问按怎样的 ...

  7. 机器学习 —— 概率图模型(Homework: Exact Inference)

    在前三周的作业中,我构造了概率图模型并调用第三方的求解器对器进行了求解,最终获得了每个随机变量的分布(有向图),最大后验分布(双向图).本周作业的主要内容就是自行编写概率图模型的求解器.实际上,从根本 ...

  8. hdoj 1789 Doing Homework again

    Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  9. homework做了些什么?

    第一步:get_new_guid_uid_pairs_{$ymd} 参数是时间和100上的文件. 那么100上的文件是从哪里来的呢? 我们进入到100机器上,打开root权限下的cron,看到如下内容 ...

随机推荐

  1. JAVA笔记26-网络编程(不等于网站编程)

    一.网络基础(TCP/IP详解) 1.IP协议(Internet Protocol):网络层,支持网间数据报通信.无连接数据报传送,数据报路由选择和差错控制. IPv4 32位(4字节),IPv6 1 ...

  2. GO语言学习笔记6-Sort的使用

    GoLang标准库的sort包提供了排序切片和用户自定义数据集以及相关功能的函数. Sort操作的对象通常是一个slice,需要满足三个基本的接口,并且能够使用整数来索引. 1.sort实现原理 So ...

  3. ef复杂模型添加

    模型浏览器 函数导入-添加存储过程名称 添加复杂实体.复杂实体可以手动在xml里面创建.在complextype里面

  4. UNIX标准C - socket套接字

    一.计算机网络 1.计算机网络的功能 a.数据通信 b.资源共享 c.提高系统的可靠性 d.分布式网络处理和负载均匀. 2.计算机网络的组成 1.通信子网:由网卡.线缆.集线器.中继器.交换器.路由器 ...

  5. Java虚拟机之JVM调节参数

    -XX:+PrintGC 使用这个参数,虚拟机启动后,每次GC就会打印日志. -XX:+UseSerialGC 使用串行垃圾回收器. -XX:+PrintGCDetails 打印详细信息.包括各个区的 ...

  6. springboot(六) Maven打包引入本地jar包

       springboot Maven打包引入本地jar包 最近在做项目的时候,有一些jar包不存在maven的依赖库中,所以需要自己引入本地jar包来达到需求,那么我们该如何去将本地的jar包引入s ...

  7. python相关遗漏知识点补充

    python中的相关帮助命令 假设s是一个字符串, 那么dir(s)可以列出字符串对象的所有属性(方法也是函数属性),其中有下划线的部分与类重 载有关,用来表示python实现细节,没有下划线的属性是 ...

  8. SQL server 从创建数据库到查询数据的简单操作

    目录. 创建数据库 创建表 插入数据 查询 1.创建数据库 --创建数据库 create database db_Product go --使用数据库use db_Productgo 2.创建表 -- ...

  9. 《Effective Java》读书笔记 - 8.通用编程

    Chapter 8 General Programming Item 45: Minimize the scope of local variables local variables应该在他们要被用 ...

  10. 如何解决tomcat9.0.14启动时控制台中出现乱码

    把/conf/logging.properties里的java.util.logging.ConsoleHandler.encoding= UTF-8改成java.util.logging.Conso ...