hdu4686 Arc of Dream
Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)
Total Submission(s): 3354    Accepted Submission(s): 1055

where
a0 = A0
ai = ai-1*AX+AY
b0 = B0
bi = bi-1*BX+BY
What is the value of AoD(N) modulo 1,000,000,007?
Each test case contains 7 nonnegative integers as follows:
N
A0 AX AY
B0 BX BY
N is no more than 1018, and all the other integers are no more than 2×109.
1 2 3
4 5 6
2
1 2 3
4 5 6
3
1 2 3
4 5 6
134
1902
1   0         0       0       0    0   0 
     1 ax*bx   0       0       0    0   0 
     0 ax*by   ax     0       0    0   0 
A=0 ay*bx   0       bx     0    0   0
     0   0         1       0       1    0   0 
     0   0         0       1       0    1   0 
0 1 0 0 0 0 1
然后直接求就行了。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
typedef unsigned long long ll;
#define inf 99999999
#define pi acos(-1.0)
#define MOD 1000000007
struct matrix{
    ll n,m,i;
    ll data[9][9];
    void init_danwei(){
        for(i=0;i<n;i++){
            data[i][i]=1;
        }
    }
};
matrix multi(matrix &a,matrix &b){
    ll i,j,k;
    matrix temp;
    temp.n=a.n;
    temp.m=b.m;
    for(i=0;i<temp.n;i++){
        for(j=0;j<temp.m;j++){
            temp.data[i][j]=0;
        }
    }
    for(i=0;i<a.n;i++){
        for(k=0;k<a.m;k++){
            if(a.data[i][k]>0){
                for(j=0;j<b.m;j++){
                    temp.data[i][j]=(temp.data[i][j]+(a.data[i][k]*b.data[k][j])%MOD )%MOD;
                }
            }
        }
    }
    return temp;
}
matrix fast_mod(matrix &a,ll n){
    matrix ans;
    ans.n=a.n;
    ans.m=a.m;
    memset(ans.data,0,sizeof(ans.data));
    ans.init_danwei();
    while(n>0){
        if(n&1)ans=multi(ans,a);
        a=multi(a,a);
        n>>=1;
    }
    return ans;
}
int main()
{
    ll n,m,i,j;
    ll ax,bx,ay,by,a0,b0,a1,b1;
    while(scanf("%llu",&n)!=EOF)
    {
        scanf("%llu%llu%llu",&a0,&ax,&ay);
        scanf("%llu%llu%llu",&b0,&bx,&by);
        if(n==0){
            printf("0\n");continue;
        }
        matrix a;
        a.n=a.m=7;
        memset(a.data,0,sizeof(a.data));
        a.data[0][0]=a.data[1][0]=a.data[4][2]=a.data[4][4]=a.data[5][3]=a.data[5][5]=a.data[6][1]=a.data[6][6]=1;
        a.data[1][1]=ax*bx%MOD;
        a.data[2][1]=ax*by%MOD;
        a.data[2][2]=ax%MOD;
        a.data[3][1]=ay*bx%MOD;
        a.data[3][3]=bx%MOD;
        matrix cnt;
        cnt=fast_mod(a,n-1);
        matrix ant;
        ant.n=1;ant.m=7;
        a1=((a0*ax)%MOD+ay)%MOD;
        b1=((b0*bx)%MOD+by)%MOD;
        ant.data[0][0]=a0*b0%MOD;
        ant.data[0][1]=a1*b1%MOD;
        ant.data[0][2]=a1%MOD;
        ant.data[0][3]=b1%MOD;
        ant.data[0][4]=ay%MOD;
        ant.data[0][5]=by%MOD;
        ant.data[0][6]=ay*by%MOD;
        matrix juzhen;
        juzhen=multi(ant,cnt);
        printf("%llu\n",juzhen.data[0][0]%MOD);
    }
    return 0;
}
hdu4686 Arc of Dream的更多相关文章
- HDU4686 Arc of Dream —— 矩阵快速幂
		题目链接:https://vjudge.net/problem/HDU-4686 Arc of Dream Time Limit: 2000/2000 MS (Java/Others) Memo ... 
- HDU4686 Arc of Dream 矩阵快速幂
		Arc of Dream Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Tota ... 
- hdu----(4686)Arc of Dream(矩阵快速幂)
		Arc of Dream Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Tota ... 
- hdu4686 Arc of Dream 2013 Multi-University Training Contest 9矩阵快速幂
		Arc of Dream Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Tot ... 
- HDU4686——Arc of Dream矩阵快速幂
		题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4686 题目大意: 已知a0=A0, ai=Ax*ai-1+Ay; b0=B0, bi=Bx*bi-1 ... 
- HDU4686 Arc of Dream 矩阵
		欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - HDU4686 题意概括 a0 = A0 ai = ai-1*AX+AY b0 = B0 bi = bi-1* ... 
- hdu4686 Arc of Dream ——构造矩阵+快速幂
		link: http://acm.hdu.edu.cn/showproblem.php?pid=4686 构造出来的矩阵是这样的:根据题目的ai * bi = ……,可以发现 矩阵1 * 矩阵3 = ... 
- HDU-4686 Arc of Dream 构造矩阵
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4686 因为ai = ai-1*AX+AY ,bi = bi-1*BX+BY ,那么ai*bi=AX*B ... 
- HDU4686—Arc of Dream
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4686 题目意思:给出一个n,算这个式子,给出A0,B0,AX,AY,然后存在以下的递推关系. a0 = ... 
随机推荐
- Java并发包源码学习系列:挂起与唤醒线程LockSupport工具类
			目录 LockSupport概述 park与unpark相关方法 中断演示 blocker的作用 测试无blocker 测试带blocker JDK提供的demo 总结 参考阅读 系列传送门: Jav ... 
- MyISAM与InnoDB两者之间区别与选择(转)
			Mysql在V5.1之前默认存储引擎是MyISAM:在此之后默认存储引擎是InnoDB MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Acces ... 
- 使用msys2在window下构建和使用Linux的软件
			目录 前言 安装 使用 总结 前言 在window下构建Linux编译环境是很常见的,以前用过mingw弄过差不多的环境. 但是使用msys2后就根本停不下来咯,太好用咯. 安装 去官网下载吧,安装跟 ... 
- P1341 无序字母对(欧拉回路)
			题目链接: https://www.luogu.org/problemnew/show/P1341 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一 ... 
- mysql—group_concat函数
			MySQL中的group_concat函数的使用方法,比如select group_concat(name) . 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Or ... 
- OGG类异常汇总
			1.启动ogg后,进程不ABEND也不向前走 原因:ogg启动后,会收集表的统计信息耗费大量时间,导致进程不往前走 解决:在参数文件中加入 SQLEXEC 'alter session set OPT ... 
- 关于springboot2.X使用外部tomcat服务器进行部署的操作详细步骤
			1.修改pom.xml文件(4个地方) ①<packaging>war</packaging>将其中的jar该为war ②<dependency> <grou ... 
- Django-http协议
			Http协议:超文本传输协议(应用层程序).它是客户端和服务端请求和应答的标准.Http的请求响应模型:1.客户端连接到web服务器一个http客户端,与web服务器的http端口(默认是80)建立了 ... 
- : cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs
			: cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs 
- socket更多方法
			一.socket的更多方法介绍 ###socket更多方法服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始TCP监听 s.accept() 被动接受TCP客 ... 
