ACM学习历程——HDU5015 233 Matrix(矩阵快速幂)(2014陕西网赛)
Description
Input
For each case, the first line contains two postive integers n,m(n ≤ 10,m ≤ 10 9). The second line contains n integers, a 1,0,a 2,0,...,a n,0(0 ≤ a i,0 < 2 31).
Output
Sample Input
1
2 2
0 0
3 7
23 47 16
Sample Output
2799
72937
Hint
这个题目由于m数据范围很大,故不能直接暴力计算。此处采用矩阵乘法,由矩阵乘法可以由每一列得到下一列。然后矩阵的乘法使用快速幂加快计算。
由2333可以由233乘10加3,于是打算构造n+2行的方阵。
大致如下:
10 0 0 0 ……0 1
10 1 0 0 ……0 1
10 1 1 0 ……0 1
……
10 1 1 1 ……1 1
0 0 0 0 ……0 1
而所要求的列矩阵大致如下:
23……3
a 1,0
a 2,0
……
a n,0
3
递推的正确性可以通过计算验证
此处矩阵通过结构体,运算符重载完成。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <queue>
#include <string>
#define inf 0x3fffffff
#define esp 1e-10
#define N 10000007
#define LL long long using namespace std; struct Mat
{
LL val[15][15];
int len; Mat operator = (const Mat& a)
{
for (int i = 0; i < len; ++i)
for (int j = 0; j < len; ++j)
val[i][j] = a.val[i][j];
len = a.len;
return *this;
} Mat operator * (const Mat& a)
{
Mat x;
memset(x.val, 0, sizeof(x.val));
x.len = len;
for (int i = 0; i < len; ++i)
for (int j = 0; j < len; ++j)
for (int k = 0; k < len; ++k)
if (val[i][k] && a.val[k][j])
x.val[i][j] = (x.val[i][j] + (val[i][k]*a.val[k][j])%N)%N;
return x;
} Mat operator ^ (const int& a)
{
int n = a;
Mat x, p = *this;
memset(x.val, 0, sizeof(x.val));
x.len = len;
for (int i = 0; i < len; ++i)
x.val[i][i] = 1;
while (n)
{
if (n & 1)
x = x * p;
p = p * p;
n >>= 1;
}
return x;
}
}; int n, m;
LL a[15], ans; void Make(Mat &p)
{
p.len = n + 2;
memset(p.val, 0, sizeof(p.val));
for (int i = 0; i <= n; ++i)
p.val[i][0] = 10;
for (int i = 0; i <= n+1; ++i)
p.val[i][n+1] = 1;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= i; ++j)
p.val[i][j] = 1;
} int main()
{
//freopen("test.txt", "r", stdin);
while (scanf("%d%d", &n, &m) != EOF)
{
Mat p;
Make(p);
p = p ^ m;
a[0] = 23;
a[n+1] = 3;
for (int i = 1; i <= n; ++i)
scanf("%I64d", &a[i]);
ans = 0;
for (int i = 0; i <= n+1; ++i)
ans = (ans + (p.val[n][i]*a[i])%N)%N;
printf("%I64d\n", ans);
}
return 0;
}
ACM学习历程——HDU5015 233 Matrix(矩阵快速幂)(2014陕西网赛)的更多相关文章
- HDU5015 233 Matrix —— 矩阵快速幂
题目链接:https://vjudge.net/problem/HDU-5015 233 Matrix Time Limit: 10000/5000 MS (Java/Others) Memor ...
- ACM学习历程——HDU5017 Ellipsoid(模拟退火)(2014西安网赛K题)
---恢复内容开始--- Description Given a 3-dimension ellipsoid(椭球面) your task is to find the minimal distanc ...
- HDU5015 233 Matrix(矩阵高速幂)
HDU5015 233 Matrix(矩阵高速幂) 题目链接 题目大意: 给出n∗m矩阵,给出第一行a01, a02, a03 ...a0m (各自是233, 2333, 23333...), 再给定 ...
- 233 Matrix 矩阵快速幂
In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23333, or 233 ...
- HDU - 5015 233 Matrix (矩阵快速幂)
In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23333, or 233 ...
- 233 Matrix(矩阵快速幂+思维)
In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23333, or 233 ...
- HDU 5015 233 Matrix --矩阵快速幂
题意:给出矩阵的第0行(233,2333,23333,...)和第0列a1,a2,...an(n<=10,m<=10^9),给出式子: A[i][j] = A[i-1][j] + A[i] ...
- ACM学习历程—HDU 5025 Saving Tang Monk(广州赛区网赛)(bfs)
Problem Description <Journey to the West>(also <Monkey>) is one of the Four Great Classi ...
- ACM学习历程—HDU 5446 Unknown Treasure(数论)(2015长春网赛1010题)
Problem Description On the way to the next secret treasure hiding place, the mathematician discovere ...
随机推荐
- NoSQL数据库的分类
- Lua学习四----------Lua变量
© 版权声明:本文为博主原创文章,转载请注明出处 1.Lua变量 - 变量在使用前,必须在代码中进行声明,即创建该变量 - 编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值 ...
- 试验笔记 - 使用7-ZIP压缩来减小APK安装包体积
7-ZIP版本:9.20 x86 And x64 Windows(2010-11-18) 1. 将APK包解压到文件夹2. 全选所有文件,右键“添加到压缩包”3.“压缩格式”必须“zip”4.“压缩等 ...
- matlab2017b linux版分享
链接:https://pan.baidu.com/s/1smrTkFN 密码:cvb3 下载后请点关注并点赞,谢谢支持.
- oracle 误删数据的回复操作
update operator t set t.username = (select username from operator AS OF TIMESTAMP TO_TIMESTAMP('201 ...
- FileInputStream 的读取操作
package xinhuiji_day07; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFou ...
- 如何运用spring将dao注入到servlet中?
1.servlet的init方法 public void init(ServletConfig config) throws ServletException { super.init(config) ...
- jvmtop 监控
1 jar包 <!-- -JVMTOP监控- --> <dependency> <groupId>joda-time</groupId> <art ...
- iOS 10 的杂碎资料
兼容iOS 10 资料整理笔记 1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大 ...
- Python爬虫-- PyQuery库
PyQuery库 PyQuery库也是一个非常强大又灵活的网页解析库,PyQuery 是 Python 仿照 jQuery 的严格实现.语法与 jQuery 几乎完全相同,所以不用再去费心去记一些奇怪 ...