哈工大的2255题解(矩阵快速幂)
来源:互联网 发布:vs开发php 编辑:程序博客网 时间:2024/06/08 15:41
矩阵快速幂最主要的是核心矩阵的构建,这题不是构建和每项有关的矩阵,而是构建和前n项和有关的矩阵利用an=sn-sn-1,记住构造的式子里未知数只能有sn,sn-1之类的
#include<stdio.h>
#include<string.h>#include<stdlib.h>
#define mod 10000000
struct juzheng{
long long a[3][3];
};
int ju[3];
juzheng mul(juzheng ch, juzheng th)
{
juzheng ans;
int i,j,k;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
ans.a[i][j]=0;
for(k=0;k<3;k++){
ans.a[i][j]+=(ch.a[i][k]*th.a[k][j]);
}
ans.a[i][j]%=mod;
}
}
return ans;
}
int pow(juzheng ch, int n)
{
juzheng ans;
int i,j;
for(i=0;i<3;i++){//初始化为单位矩阵
for(j=0;j<3;j++){
if(i==j)
ans.a[i][j]=1;
else ans.a[i][j]=0;
}
}
while(n){
if(n%2){
ans=mul(ans,ch);
}
ch=mul(ch,ch);
n/=2;
}
long long zhi=0;
for(i=0;i<3;i++){
zhi+=(ju[i]*ans.a[0][2-i]);
zhi%=mod;
}
return zhi;
}
int main()
{
int num,i,j;
juzheng ch;
scanf("%d",&num);
while(num--){
long long a,b,p,q;
long long s,e;
scanf("%lld%lld%lld%lld%lld%lld",&a,&b,&p,&q,&s,&e);
for(i=0;i<3;i++){//构造出核心矩阵
for(j=0;j<3;j++){
ch.a[i][j]=0;
}
}
ju[0]=a;
ju[1]=a+b;
ju[2]=a+b+p*b+q*a;
ch.a[0][0]=p+1;
ch.a[0][1]=q-p;
ch.a[0][2]=-1*q;
ch.a[1][0]=1;
ch.a[2][1]=1;
long long ss=0,ee=0;
if(s<=3&&s>0){//如果s==0,就可能越界
ss=ju[s-1];
}
else if(s){//不要忘记这个条件,worry了好多次
ss=pow(ch,s-3);
}
if(e<=2){
ee=ju[e];
}
else {
ee=pow(ch,e-2);
}
ee=(ee+mod)%mod;
ss=(ss+mod)%mod;
printf("%d\n",(ee-ss+mod)%mod);
}
return 0;
}
阅读全文
0 0
- 哈工大的2255题解(矩阵快速幂)
- hdu1575 Tr A(矩阵快速幂)题解
- POJ2778 DNA Sequence 题解(AC自动机+矩阵快速幂)
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的快速幂
- 矩阵的快速幂
- hdu1757 A Simple Math Problem(矩阵快速幂题解)
- poj 3070(矩阵的快速幂)
- 矩阵快速幂的写法(模板)
- 矩阵的乘法和矩阵快速幂
- 矩阵快速幂---递推题的快速计算
- 快速幂求模+矩阵的快速幂
- Oracle用户对象被锁处理
- [JZSC2017] 【NOIP2017提高组模拟6.28】总结
- CF round355 D题 构造 + 最小生成树
- 贪心1 Wiggle Subsequence(LeetCode376)
- Dubbo源码阅读之 服务端和客户端处理链
- 哈工大的2255题解(矩阵快速幂)
- 文件工具类——根据路径自己创建文件或者文件夹
- 64位Ubuntu kylin 16.04搭建nfs网络文件系统
- Spring注解
- ASCII码表
- 基于Android Studio的内存泄漏检测与解决全攻略
- python笔记2_列表和元组
- hadoop集群创建
- 简单的个人主页