HDU 6470:Count(矩阵快速幂)
Count
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1187 Accepted Submission(s): 433
Problem Description
某天奶牛想要数一数有多少头奶牛,以一种特殊的方式:
第一头奶牛为1号,第二头奶牛为2号,第三头奶牛之后,假如当前奶牛是第n头,那么他的编号就是2倍的第n-2头奶牛的编号加上第n-1头奶牛的编号再加上自己当前的n的三次方为自己的编号.
现在Farmer John想知道,第n头奶牛的编号是多少,估计答案会很大,你只要输出答案对于123456789取模.
Input
接下来T行,每行有一个正整数n,表示有n头奶牛 (n>=3)
其中,T=10^4,n<=10^18
Output
Sample Input
53691215
Sample Output
31700748664651527023
思路
给出递推式:f[i]=f[i-1]+2*f[i-2]+n^3
可以构造矩阵:
利用矩阵快速幂求解即可
代码
1 #include <bits/stdc++.h>
2 #define ll long long
3 #define ull unsigned long long
4 #define ms(a,b) memset(a,b,sizeof(a))
5 const int inf=0x3f3f3f3f;
6 const ll INF=0x3f3f3f3f3f3f3f3f;
7 const int maxn=1e6+10;
8 const ll mod=123456789;
9 const int maxm=1e3+10;
10 using namespace std;
11 struct mart
12 {
13 ll m[6][6];
14 }unit;
15 mart mult(mart x,mart y)
16 {
17 mart ans;
18 for(int i=0;i<6;i++)
19 {
20 for(int j=0;j<6;j++)
21 {
22 ans.m[i][j]=0;
23 for(int k=0;k<6;k++)
24 {
25 ans.m[i][j]+=x.m[i][k]*y.m[k][j];
26 ans.m[i][j]%=mod;
27 }
28 }
29 }
30 return ans;
31 }
32 void init()
33 {
34 for(int i=0;i<6;i++)
35 unit.m[i][i]=1;
36 }
37 mart qpow(mart a,ll b)
38 {
39 init();
40 mart ans=unit;
41 while(b)
42 {
43 if(b&1)
44 ans=mult(ans,a);
45 a=mult(a,a);
46 b>>=1;
47 }
48 return ans;
49 }
50 ll slove(ll n)
51 {
52 mart a,b;
53 int res[6][6]={
54 1,2,1,3,3,1,
55 1,0,0,0,0,0,
56 0,0,1,3,3,1,
57 0,0,0,1,2,1,
58 0,0,0,0,1,1,
59 0,0,0,0,0,1,
60 };
61 for(int i=0;i<6;i++)
62 for(int j=0;j<6;j++)
63 a.m[i][j]=1LL*res[i][j];
64
65 b.m[0][0]=2;
66 b.m[1][0]=1;
67 b.m[2][0]=8;
68 b.m[3][0]=4;
69 b.m[4][0]=2;
70 b.m[5][0]=1;
71 mart c=mult(qpow(a,n-2),b);
72 return c.m[0][0]%mod;
73 }
74 int main(int argc, char const *argv[])
75 {
76 #ifndef ONLINE_JUDGE
77 freopen("/home/wzy/in.txt", "r", stdin);
78 freopen("/home/wzy/out.txt", "w", stdout);
79 srand((unsigned int)time(NULL));
80 #endif
81 int t;
82 scanf("%d",&t);
83 ll n;
84 while(t--)
85 {
86 scanf("%lld",&n);
87 if(n==1||n==2)
88 printf("%lld\n",n);
89 else
90 printf("%lld\n",slove(n));
91 }
92 #ifndef ONLINE_JUDGE
93 cerr<<"Time elapsed: "<<1.0*clock()/CLOCKS_PER_SEC<<" s."<<endl;
94 #endif
95 return 0;
96 }
HDU 6470:Count(矩阵快速幂)的更多相关文章
- 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的 ...
- HDU 5667 构造矩阵快速幂
HDU 5667 构造矩阵快速幂 题目描述 解析 我们根据递推公式 设 则可得到Q的指数关系式 求Q构造矩阵 同时有公式 其中φ为欧拉函数,且当p为质数时有 代码 #include <cstdi ...
- 广工十四届校赛 count 矩阵快速幂
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6470 题意:求,直接矩阵快速幂得f(n)即可 构造矩阵如下: n^3是肯定得变换的,用二项式展开来一点 ...
- HDU 6185 Covering 矩阵快速幂
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6185 题意:用 1 * 2 的小长方形完全覆盖 4 * n的矩形有多少方案. 解法:小范围是一个经典题 ...
- HDU 2157(矩阵快速幂)题解
How many ways?? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 6395 分段矩阵快速幂 HDU 6386 建虚点+dij
http://acm.hdu.edu.cn/showproblem.php?pid=6395 Sequence Time Limit: 4000/2000 MS (Java/Others) Me ...
- 省选模拟赛 Problem 3. count (矩阵快速幂优化DP)
Discription DarrellDarrellDarrell 在思考一道计算题. 给你一个尺寸为 1×N1 × N1×N 的长条,你可以在上面切很多刀,要求竖直地切并且且完后每块的长度都是整数. ...
- HDU 5607 graph 矩阵快速幂 + 快速幂
这道题得到了学长的助攻,其实就是一个马尔科夫链,算出一步转移矩阵进行矩阵快速幂就行了,无奈手残 这是我第一回写矩阵快速幂,写的各种毛病,等到调完了已经8点44了,交了一发,返回PE,(发现是少了换行) ...
- HDU 1575(裸矩阵快速幂)
emmmmm..就是矩阵快速幂,直接附代码: #include <cstdio> using namespace std; ; ; struct Matrix { int m[maxn][ ...
随机推荐
- above, abrupt
above 近义词: over, beyond, exceeding反义词: below, beneath, under, underneath 有从右往左写的文字,没有从下往上的.above-men ...
- Git(一)【基本使用,集成IDEA,GitHub】
目录 一.本地库操作 ①基本操作 1.初始化本地库 2.设置用户签名|用户名|邮箱 3.查看本地库状态 4.添加暂存区 5.提交到本地库 6.查看文件modify详情 ②历史版本以及回退 1.查看历史 ...
- Hive(十一)【压缩、存储】
目录 一.Hadoop的压缩配置 1.MR支持的压缩编码 2.压缩参数配置 3.开启Mapper输出阶段压缩 4.开启Reduceer输出阶段 二.文件存储 1.列式存储和行式存储 2.TextFil ...
- 强化学习实战 | 表格型Q-Learning玩井字棋(二)
在 强化学习实战 | 表格型Q-Learning玩井字棋(一)中,我们构建了以Game() 和 Agent() 类为基础的框架,本篇我们要让agent不断对弈,维护Q表格,提升棋力.那么我们先来盘算一 ...
- Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null objec
遇到这个一场折腾了1个小时, 这是系统在解析XML的时候出错, 最后费了好大的劲才发现 XML文件中,<View> 写成小写的 <view> 了. 崩溃啊.......... ...
- 【JAVA】【Basic】MacOS上搭建JAVA开发环境
1. JRE 1.1. 下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html 1.1.1. dmg格式安装: ...
- 连接 MySQL 数据库出现问题:The server time zone value ‘�й���ʱ��‘ is unrecogni....
出现问题 The server time zone value '�й���ʱ��' is unrecogni.... 解决方案 在 URL 后面加上 ?serverTimezone=UTC 如下: ...
- Grafana 任意文件读取漏洞 (CVE-2021-43798)学习
漏洞概述 Grafana是一个跨平台.开源的数据可视化网络应用程序平台.用户配置连接的数据源之后,Grafana可以在网络浏览器里显示数据图表和警告. Grafana 的读取文件接口存在未授权,且未对 ...
- Linux中的正则
目录 一.匹配规则 二.举例 一.匹配规则 * 匹配 0 或多个字符 ? 匹配任意一个字符 [list] 匹配 list 中的任意单一字符 [^list] 匹配 除list 中的任意单一字符以外的字符 ...
- sublime打开中文文件乱码以及打开文件出现.dump
一.中文乱码 原因:中文文件由gbk编码,刚安装的sublime不支持转码 解决方法:调用ctrl+shift+p,输入:install package,回车,在稍后弹出的安装包框中搜索:Conver ...