BZOJ3231(矩阵连乘,稍有点复杂)
题意:
#include <iostream>
#include <string.h>
#include <stdio.h> using namespace std;
typedef long long LL;
const int MAXN=25; struct Matrix
{
LL m[MAXN][MAXN];
}; LL b[MAXN],c[MAXN];
LL K,M,N,P;
Matrix a,per; void Init()
{
int i,j;
for(i=0;i<=K;i++)
for(j=0;j<=K;j++)
per.m[i][j]=(i==j);
} Matrix multi(Matrix a,Matrix b)
{
Matrix c;
int i,j,k;
for(i=0;i<=K;i++)
{
for(j=0;j<=K;j++)
{
c.m[i][j]=0;
for(k=0;k<=K;k++)
c.m[i][j]+=a.m[i][k]*b.m[k][j]%P;
c.m[i][j]%=P;
}
}
return c;
} Matrix matrix_mod(LL n)
{
Matrix ans=per,p=a;
while(n)
{
if(n&1)
{
ans=multi(ans,p);
n--;
}
n>>=1;
p=multi(p,p);
}
return ans;
} int main()
{
int i,j;
Init();
LL ret1,ret2,S;
Matrix ans;
while(cin>>K)
{
ret1=ret2=0;
for(i=0;i<K;i++)
cin>>b[i];
for(i=0;i<K;i++)
cin>>c[i];
cin>>M>>N>>P;
for(i=0;i<K;i++)
{
b[i]%=P;
c[i]%=P;
}
for(i=0;i<=K;i++)
{
for(j=0;j<=K;j++)
{
a.m[i][j]=0;
if(i==0&&j==0) a.m[i][j]=1;
if(i==0&&j>0) a.m[i][j]=c[j-1];
if(i==1&&j>0) a.m[i][j]=c[j-1];
if(i>1) a.m[i][j]=(i==(j+1));
}
}
S=0;
for(i=0;i<K;i++)
{
S+=b[i];
S%=P;
}
if(N<=K)
{
for(i=0;i<=N-1;i++)
{
ret1+=b[i];
ret1%=P;
}
}
else
{
ans=matrix_mod(N-K);
ret1=ans.m[0][0]*S%P;
for(i=1;i<=K;i++)
{
ret1+=ans.m[0][i]*b[K-i]%P;
ret1%=P;
}
}
if(M-1<=K)
{
if(M>=2)
for(i=0;i<=M-2;i++)
{
ret2+=b[i];
ret2%=P;
}
if(M<2) ret2=0;
}
else
{
ans=matrix_mod(M-K-1);
ret2=ans.m[0][0]*S%P;
for(i=1;i<=K;i++)
{
ret2+=ans.m[0][i]*b[K-i]%P;
ret2%=P;
}
}
cout<<((ret1-ret2)%P+P)%P<<endl;
}
return 0;
}
BZOJ3231(矩阵连乘,稍有点复杂)的更多相关文章
- 如果你喜欢python,那你迟早会喜欢上julia的!
你可曾想过有那么一门语言: 这门语言能够有C语言一样的速度,Ruby一样得活力(dynamism).像homoiconic一样的语言,它像Lisp一样有宏,但是也像Matlab一样有显而易见.熟悉的数 ...
- [2017BUAA软工助教]团队beta得分总表
一.累计得分 项目 α例会 α发布 α测试 α展示 α事后 合计 满分 50 10 10 150 10 230 hotcode5 50 10 9 150 9 228 弗朗明哥舞步 50 10 8 13 ...
- BZOJ-3231 递归数列 矩阵连乘+快速幂
题不是很难,但是啊,人很傻啊...机子也很鬼畜啊... 3231: [Sdoi2008]递归数列 Time Limit: 1 Sec Memory Limit: 256 MB Submit: 569 ...
- [bzoj3231][SDOI2008]递归数列——矩阵乘法
题目大意: 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj和 cj ...
- 【bzoj3231】[Sdoi2008]递归数列 矩阵乘法+快速幂
题目描述 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj和 cj ...
- 【BZOJ-3243】向量内积 随机化 + 矩阵
3243: [Noi2013]向量内积 Time Limit: 10 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 1249 Solved: ...
- (转)投影矩阵的推导(Deriving Projection Matrices)
转自:http://blog.csdn.net/gggg_ggg/article/details/45969499 本文乃<投影矩阵的推导>译文,原文地址为: http://www.cod ...
- 用状态矩阵解决有序操作的case爆炸问题(转载)
转自http://qa.baidu.com/blog/?p=167 作者:qabloger 一. 简介 我们在测试中可能都会面对case爆炸问题.有的case组合是无序的,我们可以通过pict[1]组 ...
- OpenCL 矩阵乘法
▶ 矩阵乘法,按照书里的内容进行了几方面的优化,包括局部内存,矢量数据类型,寄存器,流水线等. ● 最直接的乘法.调用时 main.c 中使用 size_t globalSize[] = { rowA ...
随机推荐
- ImageView 各种工具类
package imageUtil; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOut ...
- java 数组插入元素
import java.util.Arrays; public class AddArray { public static void main(String[] args) { int[] arr ...
- Android Listview切换动画,扩展到任意view切换之间动画实现
添加布局如下: <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2010 ...
- python request模块学习
安装: pip install requests 使用: import requests HTTP请求:GET.POST.PUT.DELETE.HEAD.OPTIONS 1) get res = re ...
- 初识C(1)----与C基本无关的开篇
1.啥叫编程 编程乃编写程序的简称,所以要想知道啥叫编程,首先要清楚什么是程序(Program). 普及一点计算机小知识:从根本上说,计算机是由数字电路组成的运算机器,处理的数字也仅限于0和1组成的数 ...
- Html 小插件7 新闻免费代码
http://rss.cnfol.com/freecode/ 定制方法图:
- mysql null值问题
mysql> create table test( sn int, -> `createdTime` datetime NOT NULL COMMENT '创建时间', -> `up ...
- hdoj 5319 Painter(模拟题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5319 思路分析:假设颜色R表示为1,颜色B表示为2,颜色G表示为3,因为数据量较小,采用暴力解法即可, ...
- Java程序栈信息文件中的秘密(五)
最近发现在使用jstack工具在导出Java应用的线程栈时有一个小小的窍门,比如Linux环境上有一个用户为appuser,假如以这个用户启动了一个Java进程B,如果想要导出进程B的线程栈,则必须切 ...
- 移动互联与大数据之美-逐浪CMS2 X1.1发布
北京时间2013年7月1日: 领先的CMS研发软件厂商--上海逐浪CMS软件科技有限公司发布其年中重要更新,并以Zoomla!逐浪CMS2 X1.1为版本号向全球用户投递新版软件. 此次更新包括: 1 ...