HDU - 1757 A Simple Math Problem (构造矩阵)
来源:互联网 发布:义隆单片机c语言 编辑:程序博客网 时间:2024/05/21 09:44
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
题意:求f(k)%m
思路:还是构造矩阵跟HDU-2604类似
思路:还是构造矩阵跟HDU-2604类似
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>using namespace std;const int maxn = 10;int n, m;struct Matrix {int v[maxn][maxn];Matrix() {}Matrix(int x) {init();for (int i = 0; i < maxn; i++) v[i][i] = x;}void init() {memset(v, 0, sizeof(v));}Matrix operator *(Matrix const &b) const {Matrix c;c.init();for (int i = 0; i < maxn; i++)for (int j = 0; j < maxn; j++)for (int k = 0; k < maxn; k++)c.v[i][j] = (c.v[i][j] + (v[i][k]*b.v[k][j])%m) % m;return c;}Matrix operator ^(int b) {Matrix a = *this, res(1);while (b) {if (b & 1)res = res * a;a = a * a;b >>= 1;}return res;}} a, b, tmp;int main() {while (scanf("%d%d", &n, &m) != EOF) {a.init();for (int i = 1; i < 10; i++)a.v[i][i-1] = 1;for (int i = 0; i < 10; i++)scanf("%d", &a.v[0][i]);if (n < 10) {printf("%d\n", n%m);continue;}tmp = a^(n-9);int ans = 0;for (int i = 0; i < 10; i++)ans = (ans + tmp.v[0][i]*(9-i)) % m;printf("%d\n", ans);}return 0;}
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(矩阵快速幂)
- VC INI文件读写
- 用linux mail命令发送邮件时指定发送人
- POJ1201 Intervals
- STL中提供-二分查找算法(binary_search lower_bound upper_bound equal_range)
- 2014Esri全球用户大会之ArcGIS Online
- HDU - 1757 A Simple Math Problem (构造矩阵)
- KVO的概述与使用方法
- 基于Andoird 4.2.2的Account同步框架源代码学习——同步发起端
- C++ Set常用用法
- 基于直方图的特征-----经典的SIFT特征
- hdu 4883
- 图像处理与计算机视觉 基础、经典以及最近发展
- Android中RelativeLayout各个属性的含义
- long long 格式化