HDU 4686 Arc of Dream

来源:互联网 发布:淘宝返现哪个最好用 编辑:程序博客网 时间:2024/06/05 23:53

题意:

给出
A0 AX AY 
B0 BX BY ,

mod 1,000,000,007

0 = A0 
i = a i-1*AX+AY 
0 = B0 
i = b i-1*BX+BY 


思路:


#include<bits/stdc++.h>#define N 1000000007#define M 6using namespace std;struct node{long long a[M][M];};node cheng(node a,node b){node c;memset(c.a,0,sizeof(c.a));for(int i=0;i<M;i++)for(int j=0;j<M;j++)for(int k=0;k<M;k++)c.a[i][j]=(c.a[i][j]+(a.a[i][k]*b.a[k][j])%N)%N;return c;}void p(node a){for(int i=0;i<M;i++)for(int j=0;j<M;j++)printf("%lld%c",a.a[i][j]," \n"[j==M-1]);printf("\n");}int main(){node a,b;long long n;    long long A0, AX, AY, B0, BX, BY;while(~scanf("%lld",&n)){scanf("%lld%lld%lld%lld%lld%lld",&A0, &AX, &AY, &B0, &BX, &BY);A0%=N;AX%=N;AY%=N;B0%=N;BX%=N;BY%=N;memset(a.a,0,sizeof(a.a));memset(b.a,0,sizeof(b.a));b.a[0][1]=A0*B0%N;b.a[0][2]=A0;b.a[0][3]=B0;b.a[0][4]=AY;b.a[0][5]=BY;a.a[0][0]=a.a[1][0]=a.a[4][2]=a.a[5][3]=a.a[4][4]=a.a[5][5]=1LL;a.a[1][1]=AX*BX%N;a.a[2][1]=AX*BY%N;a.a[3][1]=AY*BX%N;a.a[4][1]=BY;a.a[2][2]=AX;a.a[3][3]=BX;p(a);p(b);while(n){if(n&1) b=cheng(b,a);     n>>=1;    a=cheng(a,a);}printf("%lld\n",(b.a[0][0]%N+N)%N);}return 0;}



原创粉丝点击