UVA - 10870 Recurrences 【矩阵快速幂】
题目链接
https://odzkskevi.qnssl.com/d474b5dd1cebae1d617e6c48f5aca598?v=1524578553
题意
给出一个表达式 算法 f(n)
思路
n 很大 自然想到是 矩阵快速幂
那么问题就是 怎么构造矩阵
我们想到的一种构造方法是
n = 2 时
n = 3 时
然后大概就能够发现规律了吧 。。
AC代码
#include <cstdio>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <map>
#include <stack>
#include <set>
#include <list>
#include <numeric>
#include <sstream>
#include <iomanip>
#include <limits>
#define CLR(a, b) memset(a, (b), sizeof(a))
#define pb push_back
#define bug puts("***bug***");
#define fi first
#define se second
#define stack_expand #pragma comment(linker, "/STACK:102400000,102400000")
#define syn_close ios::sync_with_stdio(false);cin.tie(0);
#define sp system("pause");
//#define bug
//#define gets gets_s
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef pair <string, int> psi;
typedef pair <string, string> pss;
typedef pair <double, int> pdi;
const double PI = acos(-1.0);
const double E = exp(1.0);
const double eps = 1e-8;
const int INF = 0x3f3f3f3f;
const int maxn = 1e2 + 10;
const int MOD = 142857;
int d, n, m;
ll a[20], b[20];
struct Matrix
{
ll a[20][20];
Matrix() {}
Matrix operator * (Matrix const &b)const
{
Matrix res;
CLR(res.a, 0);
for (int i = 0; i < d; i++)
for (int j = 0; j < d; j++)
for (int k = 0; k < d; k++)
res.a[i][j] = (res.a[i][j] + this->a[i][k] * b.a[k][j]) % m;
return res;
}
};
Matrix pow_mod(Matrix ans, int n)
{
Matrix base;
CLR(base.a, 0);
for (int i = 0; i < d; ++i)
{
base.a[i][0] = a[i];
}
for (int i = 0; i < d; ++i)
{
base.a[i][i + 1] = 1;
}
while (n > 0)
{
if (n & 1)
ans = ans * base;
base = base * base;
n >>= 1;
}
return ans;
}
int main()
{
while (scanf("%d %d %d", &d, &n, &m) && (d || n || m))
{
for (int i = 0; i < d; i++)
scanf("%lld", &a[i]);
for (int i = 0; i < d; i++)
scanf("%lld", &b[i]);
if (n <= d)
{
printf("%lld\n", b[n - 1] % m);
continue;
}
Matrix ans;
for (int i = 0; i < d; i++)
for (int j = 0; j < d; j++)
ans.a[i][j] = b[d - j - 1];
ans = pow_mod(ans, n - d);
printf("%lld\n", ans.a[0][0]);
}
return 0;
}
UVA - 10870 Recurrences 【矩阵快速幂】的更多相关文章
- UVa 10870 Recurrences (矩阵快速幂)
题意:给定 d , n , m (1<=d<=15,1<=n<=2^31-1,1<=m<=46340).a1 , a2 ..... ad.f(1), f(2) .. ...
- uva 10870 递推关系矩阵快速幂模
Recurrences Input: standard input Output: standard output Consider recurrent functions of the follow ...
- UVA 10870 - Recurrences(矩阵高速功率)
UVA 10870 - Recurrences 题目链接 题意:f(n) = a1 f(n - 1) + a2 f(n - 2) + a3 f(n - 3) + ... + ad f(n - d), ...
- UVA10870 Recurrences —— 矩阵快速幂
题目链接:https://vjudge.net/problem/UVA-10870 题意: 典型的矩阵快速幂的运用.比一般的斐波那契数推导式多了几项而已. 代码如下: #include <bit ...
- POJ-3070Fibonacci(矩阵快速幂求Fibonacci数列) uva 10689 Yet another Number Sequence【矩阵快速幂】
典型的两道矩阵快速幂求斐波那契数列 POJ 那是 默认a=0,b=1 UVA 一般情况是 斐波那契f(n)=(n-1)次幂情况下的(ans.m[0][0] * b + ans.m[0][1] * a) ...
- uva 10518 - How Many Calls?(矩阵快速幂)
题目链接:uva 10518 - How Many Calls? 公式f(n) = 2 * F(n) - 1, F(n)用矩阵快速幂求. #include <stdio.h> #inclu ...
- Tribonacci UVA - 12470 (简单的斐波拉契数列)(矩阵快速幂)
题意:a1=0;a2=1;a3=2; a(n)=a(n-1)+a(n-2)+a(n-3); 求a(n) 思路:矩阵快速幂 #include<cstdio> #include<cst ...
- UVA - 11149 (矩阵快速幂+倍增法)
第一道矩阵快速幂的题:模板题: #include<stack> #include<queue> #include<cmath> #include<cstdio ...
- UVA10870—Recurrences(简单矩阵快速幂)
题目链接:https://vjudge.net/problem/UVA-10870 题目意思: 给出a1,a2,a3,a4,a5………………ad,然后算下面这个递推式子,简单的矩阵快速幂,裸题,但是第 ...
随机推荐
- sed `grep` 查找并替换
sed "s/libletvwatermark/libletv_watermark/" `grep -rl libletvwatermark` grep [options] 3.主 ...
- Oracle ODBC无Oracle连接驱动
.下载odbc驱动 需要下载两个东西 instantclient.zip instantclient.zip 下载地址:http:.html 解压放到同一个目录(无冲突) .将oracle数据库所在电 ...
- libpointmatcher的filter
Maximum Density Filter Points are only considered for rejection if they exceed a density threshold, ...
- android 多应用程序数据共享 ContentProvider和ContentResolver
android 没有一个可以将所有应用程序数据统一放置的地方,即两个应用程序间的数据不能共享.但ContentProvider与ContentResolver可以解决多应用程序数据共享. 我们都知 ...
- UITextView被键盘遮挡的处理
这个应该是一个通用的任务了吧,键盘弹出来的时候,UITextView(或者UITextField)会被遮挡. 解决的办法就不是很能通用了. 1. 如果有UIScrollView做父view的话只需要滚 ...
- 关于TCP/IP,这十个问题你都知道,就入门了!
关于TCP/IP,必知必会的十个问题 本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养. TCP/IP十个问题 一.TCP/IP模型 TCP/IP ...
- SpringBoot使用Thymeleaf模板
© 版权声明:本文为博主原创文章,转载请注明出处 Thymeleaf模板简介 Thymeleaf模板是一个现代化的服务端java模板引擎对于所有的web和独立环境 Thymeleaf的主要目标是为你的 ...
- 【已解决】WebUploader 0.1.5 安卓手机不能访问相机、IOS直接访问相机 的问题
WebUploader 0.1.5 安卓手机不能访问相机.IOS直接访问相机 的问题 打开 webuploader.js if(navigator.userAgent.indexOf('Android ...
- mysql数据索引
索引是建立在数据库表中的某些列的上面.因此,在创建索引的时候,应该仔细考虑在哪些列上可以创建索引,在哪些列上不能创建索引.一般来说,应该在这些列上创建索引,例如:在经常需要搜索的列上,可以加快搜索的速 ...
- 64位win7环境eclipse集成svn后出现Failed to load JavaHL Library的解决办法
http://lushuifa.iteye.com/blog/2038000