HDU 1757 A Simple Math Problem(构造矩阵)
来源:互联网 发布:淘宝网小女孩连衣裙 编辑:程序博客网 时间:2024/05/17 20:47
A Simple Math Problem
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5125 Accepted Submission(s): 3103
Problem Description
Lele now is thinking about a simple function f(x).
If x < 10 f(x) = x.
If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10);
And ai(0<=i<=9) can only be 0 or 1 .
Now, I will give a0 ~ a9 and two positive integers k and m ,and could you help Lele to caculate f(k)%m.
If x < 10 f(x) = x.
If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10);
And ai(0<=i<=9) can only be 0 or 1 .
Now, I will give a0 ~ a9 and two positive integers k and m ,and could you help Lele to caculate f(k)%m.
Input
The problem contains mutiple test cases.Please process to the end of file.
In each case, there will be two lines.
In the first line , there are two positive integers k and m. ( k<2*10^9 , m < 10^5 )
In the second line , there are ten integers represent a0 ~ a9.
In each case, there will be two lines.
In the first line , there are two positive integers k and m. ( k<2*10^9 , m < 10^5 )
In the second line , there are ten integers represent a0 ~ a9.
Output
For each case, output f(k) % m in one line.
Sample Input
10 99991 1 1 1 1 1 1 1 1 120 5001 0 1 0 1 0 1 0 1 0
Sample Output
45104
Author
linle
Source
2007省赛集训队练习赛(6)_linle专场
POINT:
构造两个矩阵
乘
#include <iostream>#include <stdio.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;#define LL long longconst int N = 10;int p;struct mx{ int a[N+1][N+1];};mx cheng(mx a,mx b){ mx ans; for(int i=1;i<=N;i++) { for(int j=1;j<=N;j++) { ans.a[i][j]=0; for(int k=1;k<=N;k++) { (ans.a[i][j]+=a.a[i][k]*b.a[k][j])%=p; } } } return ans;}mx qkm(mx base,int mi){ mx ans; for(int i=1;i<=N;i++) { for(int j=1;j<=N;j++) { ans.a[i][j]=i==j; } } while(mi) { if(mi&1) ans=cheng(ans,base); base=cheng(base,base); mi>>=1; } return ans;}int main(){ int k,m; int a[10]; int f[10]; while(~scanf("%d %d",&k,&m)) { p=m; for(int i=0;i<=9;i++) { scanf("%d",&a[i]); f[i]=i; } if(k<=9) { printf("%d\n",f[k]%m); } else { mx base; for(int i=1;i<=10;i++) { base.a[1][i]=a[i-1]; } for(int i=2;i<=10;i++) { for(int j=1;j<=10;j++) { if(j==i-1) { base.a[i][j]=1; } else base.a[i][j]=0; } } base=qkm(base,k-9); int ans=0; for(int k=1;k<=10;k++) { (ans+=base.a[1][k]*f[10-k])%=p; } printf("%d\n",ans); } }}
阅读全文
0 0
- HDU - 1757 A Simple Math Problem (构造矩阵)
- HDU 1757 A Simple Math Problem(构造矩阵)
- hdu 1757 A Simple Math Problem 矩阵
- hdu 1757 A Simple Math Problem 矩阵
- 【HDU 1757 A Simple Math Problem】+ 矩阵
- HDU 1757 A Simple Math Problem(矩阵快速幂构造)
- 【HDU】1757 - A Simple Math Problem(矩阵构造方法 & 快速幂)
- hdu 1757 A Simple Math Problem(矩阵乘法)
- hdu - 1757 - A Simple Math Problem(矩阵快速幂)
- hdu 1757 A Simple Math Problem(矩阵快速幂)
- hdu 1757 A Simple Math Problem (矩阵快速幂)
- [HDU 1757] A Simple Math Problem (矩阵快速幂)
- HDU 1757-A Simple Math Problem(矩阵快速幂)
- hdu 1757 A Simple Math Problem(矩阵快速幂)
- HDU 1757 A Simple Math Problem (矩阵快速幂)
- HDU 1757 A Simple Math Problem(矩阵快速幂)
- hdu 1757 A Simple Math Problem(矩阵快速幂)
- HDU 1757 A Simple Math Problem(矩阵快速幂)
- 对于ObjectAnimator的简单实用
- jquery $(document).ready() 与window.onload的区别
- python3 遍历删除特定后缀名文件
- dataserver 1 FAIL to up ... CHECK IT
- NoSql对于事务的支持
- HDU 1757 A Simple Math Problem(构造矩阵)
- 《蓝牙4.0实战演练》第二版 网蜂团队 倾力打造(2014-3-6)
- Android N混合使用AOT编译,解释和JIT三种运行时
- JSP学习笔记(二)之JSP动作
- Python3.x中sklearn机器学习库中PCA参数问题
- ShareSDKUtils,封装的分享工具类,使用默认的GUI或者自定义分享某个平台
- [NOIP提高组2000]单词接龙
- nyoj746 整数划分(四)
- C# DevExpress实现搜索智能提示功能