HDU 6470 Count 【矩阵快速幂】(广东工业大学第十四届程序设计竞赛 )
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6470
Count
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 301 Accepted Submission(s): 127
某天奶牛想要数一数有多少头奶牛,以一种特殊的方式:
第一头奶牛为1号,第二头奶牛为2号,第三头奶牛之后,假如当前奶牛是第n头,那么他的编号就是2倍的第n-2头奶牛的编号加上第n-1头奶牛的编号再加上自己当前的n的三次方为自己的编号.
现在Farmer John想知道,第n头奶牛的编号是多少,估计答案会很大,你只要输出答案对于123456789取模.
接下来T行,每行有一个正整数n,表示有n头奶牛 (n>=3)
其中,T=10^4,n<=10^18
解题思路:
很裸的一道矩阵快速幂的题,递推式都给出来了。
问题在于如何构造转移矩阵?也就是如何搞定 n 的3次方?
最终的转移矩阵:
AC code:
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define LL long long
using namespace std;
const int MAXN = ;
const LL MOD = ;
template<typename T, int N = >
struct Matrix
{
Matrix(int f = ):n(sizeof(data[])/sizeof(data[][])){
for(int i = ; i < n; i++)
for(int j = ; j < n; j++)
data[i][j] = ;
if(f)
for(int i = ; i < n; i++) data[i][i] = T();
} Matrix operator * (const Matrix other) const{
Matrix<T, N> ret;
for(int i = ; i < n; i++)
for(int j = ; j < n; j++)
for(int k = ; k < n; k++)
ret.data[i][j] = (ret.data[i][j] + data[i][k] * other.data[k][j]%MOD)%MOD;
return ret;
} Matrix operator + (const Matrix other) const{
Matrix<T, N> ret;
for(int i = ; i < n; i++)
for(int j = ; j < n; j++)
ret.data[i][j] = (data[i][j] + other[i][j])%MOD;
return ret;
} Matrix operator % (const LL MOD){
return *this;
} T data[N][N];
int n; }; template<typename T>
T mul(T a, LL n, LL mod)
{
T ret();
for(; n ; n >>= ){
ret = ret*(n& ? a:T()) %mod;
a = a*a%mod;
}
return ret;
} const LL modulu[MAXN][MAXN] = {
{, , , , , },
{, , , , , },
{, , , , , },
{, , , , , },
{, , , , , },
{, , , , , }
}; int main()
{
std::ios::sync_with_stdio(false);
int T;
cin >> T;
for(LL n; T--; ){
cin >> n;
if(n <= ){
cout << n << endl;
continue;
}
Matrix<LL, MAXN> a;
memcpy(a.data, modulu, sizeof(modulu));
a = mul(a, n-, MOD);
cout << (a.data[][]* + a.data[][]* + a.data[][]* + a.data[][]* + a.data[][]* + a.data[][]*)%MOD << endl;
}
return ;
}
HDU 6470 Count 【矩阵快速幂】(广东工业大学第十四届程序设计竞赛 )的更多相关文章
- HDU 6467 简单数学题 【递推公式 && O(1)优化乘法】(广东工业大学第十四届程序设计竞赛)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6467 简单数学题 Time Limit: 4000/2000 MS (Java/Others) M ...
- HDU 6464 免费送气球 【权值线段树】(广东工业大学第十四届程序设计竞赛)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6464 免费送气球 Time Limit: 2000/1000 MS (Java/Others) M ...
- HDU 6467.简单数学题-数学题 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
简单数学题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- HDU 6464.免费送气球-动态开点-权值线段树(序列中第first小至第second小的数值之和)(感觉就是只有一个状态的主席树) (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
免费送气球 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- HDU 6463.超级无敌简单题-卡边界的暴力 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
超级无敌简单题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- “字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛 1010 Count
思路:矩阵快速幂.推一下初始矩阵就好了 #include<bits/stdc++.h> #define LL long long #define fi first #define se s ...
- HDU 6462.人类史上最大最好的希望事件-递推 (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
人类史上最大最好的希望事件 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- HDU 6470 【矩阵快速幂】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6470 写这道题是为了让自己不要忘记矩阵快速幂如何推出矩阵式子的. 注意 代码是TLE的!! #incl ...
- HDU.2640 Queuing (矩阵快速幂)
HDU.2640 Queuing (矩阵快速幂) 题意分析 不妨令f为1,m为0,那么题目的意思为,求长度为n的01序列,求其中不含111或者101这样串的个数对M取模的值. 用F(n)表示串长为n的 ...
随机推荐
- C#操作Redis SortedSet 有序集合
/// <summary> /// Redis 有序集合 /// </summary> public static void Redis_SetSorted() { Redis ...
- Firebird Fluentdata
Fluentdata 支持很多种数据库驱动,但对Firebird不友好,不过可以使用DB2Provider来操作大部分功能, 例如: new DbContext().ConnectionString( ...
- yii1的笔记
$sql = 'SELECT * FROM to8to_worker_item limit 10'; $res = Yii::app()->db->createCommand($sql)- ...
- Hadoop 完全分布式部署(三节点)
用来测试,我在VMware下用Centos7搭起一个三节点的Hadoop完全分布式集群.其中NameNode和DataNode在同一台机器上,如果有条件建议大家把NameNode单独放在一台机器上,因 ...
- Spring课程 Spring入门篇 5-7 advisors
1 简析 1.1 advisor简析(这个不太明白,后续再看吧) 2 代码演练 2.1 环绕通知的综合应用(代码和视频对不上,慕课网讲的本身有问题) 1 简析 1.1 advisor简析( ...
- java TreeSet 实现存自定义不可重复数据
本文主要是介绍一下java集合中的比较重要的Set接口下的可实现类TreeSet TreeSet类,底层用二叉树的数据结构 * 集合中以有序的方式插入和抽取元素. * 添加到TreeSet中的元素必须 ...
- JS原型链继承
继承普通版 继承逻辑上都差不多,普通版调用方式比较繁琐,不利于反复大量的使用: (function (){ //创建一个人员类 function Person(name){ this.name = n ...
- 51Nod1601 完全图的最小生成树计数
传送门 我居然忘写题解啦!(记忆废) 不管怎么说,这题还算是一道好题啊……你觉得敦爷出的题会有水题么 …… 这题比较容易把人误导到Boruvka算法之类的东西上去(我们机房去刚D题的人一开始大多也被误 ...
- 查看postgre都有哪些语句占用CPU
查看占用CPU最多的几个postgresql ps aux | grep postgres | sort -n -r -k 3 | head -10 | awk '{print $2, $3}' 查看 ...
- C# Winform DataGridView获取单元格的值
1,可以直接通过DataGridView的重载运算符[]直接获取 使用方法: dataGridView[columnIndex][rowsIndex].Value.ToString().//colum ...