hdu 5950 数学公式 + 矩阵快速幂
来源:互联网 发布:java堆栈溢出怎么解决 编辑:程序博客网 时间:2024/06/08 15:52
Recursive sequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2205 Accepted Submission(s): 976
Problem Description
Farmer John likes to play mathematics games with his N cows. Recently, they are attracted by recursive sequences. In each turn, the cows would stand in a line, while John writes two positive numbers a and b on a blackboard. And then, the cows would say their identity number one by one. The first cow says the first number a and the second says the second number b. After that, the i-th cow says the sum of twice the (i-2)-th number, the (i-1)-th number, andi4 . Now, you need to write a program to calculate the number of the N-th cow in order to check if John’s cows can make it right.
Input
The first line of input contains an integer t, the number of test cases. t test cases follow.
Each case contains only one line with three numbers N, a and b where N,a,b <231 as described above.
Each case contains only one line with three numbers N, a and b where N,a,b <
Output
For each test case, output the number of the N-th cow. This number might be very large, so you need to output it modulo 2147493647.
Sample Input
23 1 24 1 10
Sample Output
85369HintIn the first case, the third number is 85 = 2*1十2十3^4. In the second case, the third number is 93 = 2*1十1*10十3^4 and the fourth number is 369 = 2 * 10 十 93 十 4^4.解: 将n^4 化简 n^4=(n-1)^4+4*(n-1)^3+6*(n-1)^2+4*(n-1)^+1;具体构造矩阵请看 代码:#include <iostream>#include <stdio.h>#include <string.h>#define N 7using namespace std;typedef long long ll;const ll mod=2147493647;ll a[N][N],temp[N][N],res[N][N],c[3];ll x,y,n;void init(){ a[0][0]=1,a[0][1]=2,a[0][2]=1,a[0][3]=4,a[0][4]=6,a[0][5]=4,a[0][6]=1; a[1][0]=1,a[1][1]=0,a[1][2]=0,a[1][3]=0,a[1][4]=0,a[1][5]=0,a[1][6]=0; a[2][0]=0,a[2][1]=0,a[2][2]=1,a[2][3]=4,a[2][4]=6,a[2][5]=4,a[2][6]=1; a[3][0]=0,a[3][1]=0,a[3][2]=0,a[3][3]=1,a[3][4]=3,a[3][5]=3,a[3][6]=1; a[4][0]=0,a[4][1]=0,a[4][2]=0,a[4][3]=0,a[4][4]=1,a[4][5]=2,a[4][6]=1; a[5][0]=0,a[5][1]=0,a[5][2]=0,a[5][3]=0,a[5][4]=0,a[5][5]=1,a[5][6]=1; a[6][0]=0,a[6][1]=0,a[6][2]=0,a[6][3]=0,a[6][4]=0,a[6][5]=0,a[6][6]=1;}void pw(ll a[N][N],ll b[N][N]){ memset(temp,0,sizeof(temp)); for (int i=0;i<N;i++) for (int j=0;j<N;j++) for (int k=0;k<N;k++) temp[i][j]=(temp[i][j]%mod+a[i][k]*b[k][j]%mod)%mod; for (int i=0;i<N;i++) for (int j=0;j<N;j++) a[i][j]=temp[i][j];}void ppw(ll a[N][N],ll nu){ memset(res,0,sizeof(res)); for (int i=0;i<N;i++) res[i][i]=1; while (nu) { if (nu&1) pw(res,a); pw(a,a); nu>>=1; }}void init1(){ c[0]=(2*x%mod+y%mod+81)%mod; c[1]=y%mod;}int main(){ int t; ll ans; cin>>t; while (t--) { scanf("%lld%lld%lld",&n,&x,&y); ans=0; if (n==1) cout<<x%mod<<endl; else if (n==2) cout<<y%mod<<endl; else if (n==3) cout<<(2*x%mod+y%mod+81)%mod<<endl; else { init(); init1(); ppw(a,n-3); ans=(ans+c[0]*res[0][0]%mod)%mod; ans=(ans+c[1]*res[0][1]%mod)%mod; ans=(ans+81*res[0][2]%mod)%mod; ans=(ans+27*res[0][3]%mod)%mod; ans=(ans+9*res[0][4]%mod)%mod; ans=(ans+3*res[0][5]%mod)%mod; ans=(ans+res[0][6]%mod)%mod; printf("%lld\n",ans); } } return 0;}
阅读全文
0 0
- hdu 5950 数学公式 + 矩阵快速幂
- 数学公式+矩阵快速幂 hdu-4565 So Easy!
- (矩阵快速幂, 数学公式推导)HDU 6050 Funny Function
- HDU 5950 矩阵快速幂
- [hdu 5950 Recursive sequence] 矩阵快速幂
- HDU-5950-Recursive sequence-矩阵快速幂
- HDU 5950 Recursive sequence 矩阵快速幂
- [矩阵快速幂]HDU 5950 Recursive sequence
- HDU 5950(矩阵快速幂)
- HDU 5950 Recursive sequence(矩阵构造+矩阵快速幂)
- 【矩阵快速幂】hdu 1575
- 【矩阵快速幂】hdu 1757
- hdu 2604 矩阵快速幂
- hdu-1575矩阵快速幂
- hdu 1575 矩阵快速幂
- hdu 1575(矩阵快速幂)
- hdu 3306 矩阵快速幂
- hdu 1757 矩阵快速幂
- 浅析嵌入式MCU硬件设计相关要素
- Node.js中的缓冲与流模块详细介绍_node.js
- Hello CSDN
- PAT (Basic Level) Practise (中文)1072. 开学寄语(20)
- 【Node】Node安装
- hdu 5950 数学公式 + 矩阵快速幂
- php验证码的封装和使用
- [DeeplearningAI笔记]神经网络与深度学习3.2_3.11(激活函数)浅层神经网络
- 秒杀系统并发应对的设计思路小结
- 编写程序数一下 1到 100 的所有整数中出现多少次数字9。
- python爬虫实战笔记---selenium爬取QQ空间说说并存至本地(上)
- java---策略模式
- 跟我撩fastjson-第一章:认识fastjson
- 实验4:栈和队列的基本操作实现及其应用之《顺序栈》