hdu 5015 233 Matrix(构造矩阵)
http://acm.hdu.edu.cn/showproblem.php?pid=5015
由于是个二维的递推式,当时没有想到能够这样构造矩阵。从列上看,当前这一列都是由前一列递推得到。依据这一点来构造矩阵。令b[i]代表第i列,是一个(n+2)*1的矩阵,即b[1] = [1,233......],之所以在加了两行,是要从前一个矩阵b[i-1]得到b[i]中的第二个数2333...,再构造一个转换矩阵a,它是一个(n+2)*(n+2)的矩阵,那么a^(m-1) *
b就是第m列。
/*
a矩阵:
1 0 0 0 0...
3 10 0 0 0...
3 10 1 0 0...
3 10 1 1 0...
3 10 1 1 1...
.. b矩阵:第1列 */
#include <stdio.h>
#include <iostream>
#include <map>
#include <set>
#include <list>
#include <stack>
#include <vector>
#include <math.h>
#include <string.h>
#include <queue>
#include <string>
#include <stdlib.h>
#include <algorithm>
#define LL __int64
//#define LL long long
#define eps 1e-9
#define PI acos(-1.0)
using namespace std;
const int INF = 0x3f3f3f3f;
const int mod = 10000007; struct matrix
{
LL mat[15][15];
void init()
{
memset(mat,0,sizeof(mat));
for(int i = 0; i < 15; i++)
{
mat[i][i] = 1;
}
}
}a,b,res; int n,m; matrix mul(matrix a, matrix b)
{
matrix ans;
memset(ans.mat,0,sizeof(ans.mat));
for(int i = 0; i < n+2; i++)
{
for(int k = 0; k < n+2; k++)
{
if(a.mat[i][k] == 0)
continue;
for(int j = 0; j < n+2; j++)
{
ans.mat[i][j] += (a.mat[i][k] * b.mat[k][j])%mod;
ans.mat[i][j] %= mod;
}
}
}
return ans;
} matrix pow(matrix a, int n)
{
matrix ans;
ans.init();
while(n)
{
if(n&1)
ans = mul(ans,a);
n >>= 1;
a = mul(a,a);
}
return ans;
} int main()
{
int x;
while(~scanf("%d %d",&n,&m))
{
memset(b.mat,0,sizeof(b.mat));
b.mat[0][0] = 1;
b.mat[1][0] = 233;
for(int i = 2; i < n+2; i++)
{
scanf("%d",&x);
b.mat[i][0] = (b.mat[i-1][0] + x%mod)%mod;
} memset(a.mat,0,sizeof(a.mat));
a.mat[0][0] = 1;
for(int i = 1; i < n+2; i++)
{
a.mat[i][0] = 3;
a.mat[i][1] = 10;
for(int j = 2; j <= i; j++)
a.mat[i][j] = 1;
}
res = pow(a,m-1);
LL anw = 0;
for(int i = 0; i < n+2; i++)
{
anw += (res.mat[n+1][i] * b.mat[i][0])%mod;
anw %= mod;
}
printf("%I64d\n",anw);
}
return 0;
}
hdu 5015 233 Matrix(构造矩阵)的更多相关文章
- hdu 5015 233 Matrix (矩阵高速幂)
233 Matrix Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...
- HDU 5015 233 Matrix(网络赛1009) 矩阵快速幂
先贴四份矩阵快速幂的模板:http://www.cnblogs.com/shangyu/p/3620803.html http://www.cppblog.com/acronix/archive/20 ...
- HDU - 5015 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(杨辉三角/前缀+矩阵快速幂)
233 Matrix In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23 ...
- HDU 5015 233Matrix (构造矩阵)
233 Matrix Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...
- 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] ...
- HDU 5015 233 Matrix
题意:给定一个矩阵的第0列的第1到n个数,第一行第1个数开始每个数分别为233, 2333........,求第n行的第m个数. 分析: 其实也没那么难,自己想了半天还没往对的方向想,m最大1e9,应 ...
- ACM学习历程——HDU5015 233 Matrix(矩阵快速幂)(2014陕西网赛)
Description In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 2 ...
- hdu 4965 Fast Matrix Calculation(矩阵高速幂)
题目链接.hdu 4965 Fast Matrix Calculation 题目大意:给定两个矩阵A,B,分别为N*K和K*N. 矩阵C = A*B 矩阵M=CN∗N 将矩阵M中的全部元素取模6,得到 ...
随机推荐
- VC socket Connect 超时时间设置
设置connect超时很简单,CSDN上也有人提到过使用select,但却没有一个令人满意与完整的答案.偶所讲的也正是select函数,此函数集成在winsock1.1中,简单点讲,"作用使 ...
- Java批量生成Mac地址到文件
public class Main { public static void main(String[] args) { // 生成文件名称 String filePath = "mac.t ...
- tomcat7 启动报错(转)
不加载任何自己的项目启动即报错: 严重: Error deploying web application directory D:\tomcat7.0.30\webapps\docs java.l ...
- 【从零学习openCV】opecv操作像素
1. 存取像素值 在opencv中能够直接对cv::Mat类型的图像调用at函数读取或赋值某个像素,我们用个简单的案例来说明: //在一张图像上增加椒盐噪声,image为输入图像.n为噪点个数 voi ...
- Linux经常使用命令(十一) - more
more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最主要的指令就是按空白键(space)就往下一页显示,按 b 键就会 ...
- 中介者模式 C++ 实现
#include<iostream> #include<string> #include<vector> #include<cstdlib> using ...
- 与众不同 windows phone (11) - Background Task(后台任务)之警报(Alarm)和提醒(Reminder)
原文:与众不同 windows phone (11) - Background Task(后台任务)之警报(Alarm)和提醒(Reminder) [索引页][源码下载] 与众不同 windows p ...
- 与众不同 windows phone (8) - Tile(磁贴)
原文:与众不同 windows phone (8) - Tile(磁贴) [索引页][源码下载] 与众不同 windows phone (8) - Tile(磁贴) 作者:webabcd介绍与众不同 ...
- 居然还有FindFirstChangeNotification函数
http://download.csdn.net/download/sololie/5966243
- js 常用正则表达式分析详解
1.整数或者小数:/^((0{1}|[1-9]{1}[0-9]+)\.{1}[0-9]+|[1-9]{1}[0-9]*|0)$/ 分析:分类讨论,如果是小数,则有两种形式 0.111对应的是 0{ ...