#include <stdio.h> #include <cstring> #include <iostream> #define mod 10000000 using namespace std; typedef long long LL; LL a[4][4],tmp[4][4],ans[4][4]; void mul(LL a[][4],LL b[][4]) { for(int i=1; i<=3; i++) for(int j=1; j<=3; j++) { tmp[i][j]=0; for(int k=1; k<=3; k++) { tmp[i][j]+=a[i][k]*b[k][j]; tmp[i][j]%=mod; } } memcpy(a,tmp,sizeof(tmp)); } void pow(LL ans[][4],LL b[][4],int n) { memset(ans,0,sizeof(ans)); for(int i=1; i<=3; i++) ans[i][i]=1; while(n) { if(n&1) mul(ans,b); mul(b,b); n>>=1; } } int main() { int t,aa,bb,p,q,s,e,a1,a2; scanf("%d",&t); while(t--) { scanf("%d%d%d%d%d%d",&aa,&bb,&p,&q,&s,&e); memset(a,0,sizeof(a)); a[1][1]=p; a[1][2]=q; a[2][1]=a[3][1]=a[3][3]=1; s--; if(s==0) a1=aa; else if(s<0) a1=0; else { memset(ans,0,sizeof(ans)); pow(ans,a,s); a1=(bb*ans[3][1]+aa*ans[3][2]+aa*ans[3][3])%mod; } if(e==0) a2=aa; else { memset(ans,0,sizeof(ans)); memset(a,0,sizeof(a)); a[1][1]=p; a[1][2]=q; a[2][1]=a[3][1]=a[3][3]=1; pow(ans,a,e); a2=(bb*ans[3][1]+aa*ans[3][2]+aa*ans[3][3])%mod; } printf("%d\n",(a2-a1+mod)%mod); } return 0; }
hoj 2255 Not Fibonacci
最新推荐文章于 2019-06-11 23:06:48 发布