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,看到如下内容 ...
随机推荐
- Cassandra介绍
Cassandra介绍 Apache Cassandra 是一个开源的.分布式.无中心.弹性可扩展.高可用.容错.一致性可调.面向列的数据库.它基于Amazon Dynamo的分布式设计 Cassan ...
- 线程工具类ThreadUtils
package yqw.java.util; public class ThreadUtils { /** * showThreadInfo * * @return ...
- Windows10 + VS2015 环境下对gdal2.0.1进行64bit编译小结
这是官方给出的编译指导,但是在实践过程中有几点仍然需要特别注意. Tip 1:不要使用默认的"VS开发人员命令提示"工具,使用该工具会遭遇如下的错误: 正在创建库 gdal_i.l ...
- Mybatis学习笔记之---编写dao实现类的CRUD
Mybatis编写dao实现类的CRUD 1.pom.xml <dependencies> <dependency> <groupId>junit</grou ...
- kibana花式查询
在kibana提供的界面上进行操作. POST /school/student/_bulk{ "index": { "_id": 1 }}{ "nam ...
- Access to the requested object is only available from the local network phpmyadmin
http://stackoverflow.com/questions/11999371/access-to-the-requested-object-is-only-available-from-th ...
- centos下面配置key登录
centos下需要配置使用key登录,并且要禁止root登录 下面的操作都是用root来设置的 1.添加新用户 例如用户名leisiyuan useradd leisiyuan 2.设置密码 pass ...
- leetcode-easy-array-283 move zeros
mycode 77.24% class Solution(object): def moveZeroes(self, nums): """ :type nums: Li ...
- VC CString,int,string,char*之间的转换
CString转string : CString strMfc = "test"; std::string strStr; strStr = strMfc.GetBuffer(); ...
- iOS SDK开发之 .framework静态库
查看.a静态库的生成及使用单击此处 注:这篇教程将只使用一小部分Objective-C代码,本文主要讲解从开始到应用的详细步骤.环境:xcode 9.2下面我们开始操作: 第一步:创建一个静态库工程 ...