HDU4471 Homework
题目
预处理转移矩阵的\(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的更多相关文章
- 【HDU4471】Homework(矩阵快速幂)
[HDU4471]Homework(矩阵快速幂) 题面 Vjudge 给定一个数列的前\(m\)项,给定一个和前\(t\)项相关的递推式. 有\(q\)个位置的递推式单独给出,求数列第\(n\)项. ...
- bzoj 4320: ShangHai2006 Homework
4320: ShangHai2006 Homework Time Limit: 10 Sec Memory Limit: 128 MB Description 1:在人物集合 S 中加入一个新的程序员 ...
- HDU 1789 Doing Homework again(贪心)
Doing Homework again 这只是一道简单的贪心,但想不到的话,真的好难,我就想不到,最后还是看的题解 [题目链接]Doing Homework again [题目类型]贪心 & ...
- hdu-1789-Doing Homework again
/* Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 1789 Doing Homework again (贪心)
Doing Homework again http://acm.hdu.edu.cn/showproblem.php?pid=1789 Problem Description Ignatius has ...
- Doing Homework 状态压缩DP
Doing Homework 题目抽象:给出n个task的name,deadline,need. 每个任务的罚时penalty=finish-deadline; task不可以同时做.问按怎样的 ...
- 机器学习 —— 概率图模型(Homework: Exact Inference)
在前三周的作业中,我构造了概率图模型并调用第三方的求解器对器进行了求解,最终获得了每个随机变量的分布(有向图),最大后验分布(双向图).本周作业的主要内容就是自行编写概率图模型的求解器.实际上,从根本 ...
- hdoj 1789 Doing Homework again
Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- homework做了些什么?
第一步:get_new_guid_uid_pairs_{$ymd} 参数是时间和100上的文件. 那么100上的文件是从哪里来的呢? 我们进入到100机器上,打开root权限下的cron,看到如下内容 ...
随机推荐
- [每日一讲] Python系列:列表与元组
参考文档 https://docs.python.org/zh-cn/3.7/tutorial/introduction.html#lists """ DATA STRU ...
- JS定时循环
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- linux下为已经编译好的php环境添加mysql扩展(php安装完成后如何添加mysql扩展)
问题背景 平常我们都是先安装mysql,然后才能去安装php.假如先安装php,后安装mysql,由于php需要连接mysql,因而在php引擎中需要配置使用mysql.so扩展.这时需要手动编译生成 ...
- ArrayList的contains()和HashSet的contains()效率比较
ArrayList的contains(Object o)方法内部只有一行代码:判断indexOf(0)是否大于等于0.而indexOf(o)内部会从头遍历数组,直到某位置的元素等于o,极端情况下,要把 ...
- [模板] Kruskal算法 && 克鲁斯卡尔重构树
克鲁斯卡尔重构树 发现没把板子放上来... 现在放一下 克鲁斯卡尔算法的正确性是利用反证法证明的. 简要地说, 就是如果不加入当前权值最小的边 \(e_1\), 那么之后加入的边和这条边会形成一个环. ...
- CDOJ 203 并查集+优先队列 好题
题目链接 Islands Time Limit: 30000/10000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) S ...
- 手写ORM
利用ORM把mysql中的数据封装成对象,通过对象点语法来获取mysql中的数据,所以自己手写一个ORM,方便我们操作数据 一.ORM:对象关系映射 类 >>> 数据库的一张表 对象 ...
- springboot(一).初识springboot以及基本项目搭建
初识springboot 以及基本项目搭建 由于新的项目需要搭建后台框架,之前的springmvc架构也使用多次,在我印象中springboot的微服务架构更轻量级更容易搭建,所以想去试试spring ...
- [BZOJ3033]:太鼓达人(爆搜)
题目传送门 题目描述 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员XLk.Poet_shy和lyd ...
- 清理docker 容器下面的log
1. docker info 找到docker root dir 2. go to /var/lib/docker 3. constainers 下面有每个容器的文件夹,-json.log 结尾的为L ...