2016ACM/ICPC亚洲区沈阳站
来源:互联网 发布:合肥淘宝客服招聘 编辑:程序博客网 时间:2024/04/29 15:26
Recursive sequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2042 Accepted Submission(s): 914
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, and i4 . 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.
Source
2016ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)
题意:
已知 F(1) = a , F(2) = b , F(n) = F(n-1) + F(n-2) * 2 + n^4, 求F(n)
思路:
构造矩阵。
类似斐波那契数矩阵构造
因为有n^4 所以想到要用其得到 (n+1)^4 = n^4 + 4*n^3 + 6*n^2 + 4*n + 1
可知得到(n+1)^4 需要 n^4 , n^3, n^2 , n , 1
得到F(n)则需要F(n-1) F(n-2)和n^4
构造矩阵 A(n^4 n^3 n^2 n 1 F(n-1) F(n-2) )
需另外构造矩阵 B 使得 A*B = ((n+1)^4 (n+1)^3 (n+1)^2 n+1 1 F(n) F(n-1) )
得矩阵B
之后用矩阵快速幂
#include<iostream>#include<string.h>#include<stdio.h>#include<math.h>using namespace std;#define LL long longLL T,N,a,b;const LL mod = 2147493647;struct node{ LL a[10][10],h,l; node(){ memset(a,0,sizeof a); } friend node operator * (node a,node b) { node c; c.h = a.h,c.l = b.l; for(int i=0;i<a.h;i++){ for(int j=0;j<b.l;j++){ for(int k=0;k<7;k++){ c.a[i][j] += a.a[i][k] * b.a[k][j]; c.a[i][j] %= mod; } } } return c; }};node A,B;node jqkm(node a,LL m){ node base = a,ans; for(int i=0;i<7;i++){ ans.a[i][i] = 1; } ans.h = ans.l = base.h = base.l = 7; while(m){ if(m&1) ans = ans*base; base=base*base; m>>=1; } return ans;}int main(){ scanf("%lld",&T); LL aa[10][10]={{1,4,6,4,1,0,0},{0,1,3,3,1,0,0},{0,0,1,2,1,0,0},{0,0,0,1,1,0,0},{0,0,0,0,1,0,0},{1,0,0,0,0,1,2},{0,0,0,0,0,1,0}}; A.h = A.l = 7; for(int i=0;i<7;i++){ for(int j=0;j<7;j++){ A.a[i][j] = aa[i][j]; } } while(T--){ scanf("%lld%lld%lld",&N,&a,&b); if(N==1){ printf("%lld\n",a%mod); continue; } else if(N==2){ printf("%lld\n",b%mod); continue; } LL bb[10]={81,27,9,3,1,b%mod,a%mod}; for(int i=0;i<7;i++) B.a[i][0] = bb[i]; B.h=7,B.l=1; node C = jqkm(A, N-2); B = C*B; printf("%lld\n",B.a[5][0]); } return 0;}
阅读全文
0 0
- 2016ACM/ICPC亚洲区沈阳站
- 2017ACM/ICPC亚洲区沈阳站
- 2016ACM/ICPC亚洲区沈阳站两道水题
- HDU5950 2016ACM/ICPC亚洲区沈阳站现场赛
- 【解题报告】2015ACM/ICPC亚洲区沈阳站
- Pagodas --(hdu5512)2015ACM/ICPC亚洲区沈阳站
- 2015ACM/ICPC亚洲区沈阳站 HDU
- 【HDU 6228、2017ACM/ICPC亚洲区沈阳站】Tree
- 【HDU 6227 2017ACM/ICPC亚洲区沈阳站】Rabbits
- 2017ACM/ICPC亚洲区沈阳站【solved:6 / 13】
- Hdoj Recursive sequence 2016ACM/ICPC亚洲区沈阳站 【矩阵加速状态转移】
- 2016ACM/ICPC亚洲区沈阳站1003题 Recursive sequence +构造矩阵+矩阵连乘
- 2016ACM/ICPC亚洲区沈阳站现场赛题解报告
- HDU 5952 Counting Cliques(2016ACM/ICPC亚洲区沈阳站-重现赛)
- HDU 5950 Recursive sequence(2016ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学))
- HDU 5949 Relative atomic mass 【模拟】 (2016ACM/ICPC亚洲区沈阳站)
- HDU 5948 Thickest Burger 【模拟】 (2016ACM/ICPC亚洲区沈阳站)
- 2016ACM-ICPC亚洲区沈阳站 C-Recursive sequence 矩阵快速幂
- 53.Maximum Subarray
- (四)OOP(面向对象编程)规约
- linux基础5
- 【练习】哈工大数据结构实验——算术表达式求值
- 浅谈JSONP
- 2016ACM/ICPC亚洲区沈阳站
- RecyclerView的分割线+回调接口的点击事件(点击事件+长按的点击事件)
- 视频分类数据集
- 学习cooik和JavaBean的区别
- 大数据竞赛入门——线性分类模型模板
- Android学习-五布局之线性布局
- 文章标题
- 词语变形 -- 算法小结
- Windows下Clion中文乱码解决