【洛谷T37388】P哥破解密码
原题图:
看到这个题,首先想到的当然是暴力打表找规律了
表:
1 2
2 4
3 7
4 13
5 24
6 44
7 81
8 149
9 274
10 504
11 927
12 1705
13 3136
14 5768
15 10609
发现上下两个数近似于2倍关系,但f[i-1]*2略大于f[i]
用f[i-1]*2-f[i],发现恰好等于f[i-4]
于是就有了递推式:f[i]=f[i-1]*2-f[i-4]
矩阵加速即可
矩阵加速的方法:
我们有一个4*4的矩阵A和一个向量c[13,7,4,2],
我们要让c*A得到向量c1[13*2-2,13,7,4]
于是得到下面的矩阵:
2 1 0 0
0 0 1 0
0 0 0 1
-1 0 0 0
矩阵快速幂即可
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define MOD 19260817
#define int long long
int T,n,ans[]={,,,,};
struct Matrix{
int m[][];
} O,E,A;
inline Matrix Mul(Matrix X,Matrix Y){
Matrix Ans=O;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
for(int k=;k<=;k++)
Ans.m[i][j]=(Ans.m[i][j]+X.m[i][k]*Y.m[k][j])%MOD;
return Ans;
}
Matrix qpow(Matrix X,int k){
Matrix S=E;
while(k){
if(k&) S=Mul(S,X);
k>>=;
X=Mul(X,X);
}
return S;
}
#undef int
int main()
#define int long long
{
E.m[][]=E.m[][]=E.m[][]=E.m[][]=;
A.m[][]=;
A.m[][]=;
A.m[][]=;
A.m[][]=-;
A.m[][]=;
scanf("%lld",&T);
for(int i=;i<=T;i++){
scanf("%lld",&n);
if(n<=){
printf("%lld\n",ans[n]);
continue;
}
Matrix Ans=qpow(A,n-);
int ans=((Ans.m[][]*+Ans.m[][]*+Ans.m[][]*+Ans.m[][]*)%MOD+MOD)%MOD;
printf("%lld\n",ans);
}
return ;
}
【洛谷T37388】P哥破解密码的更多相关文章
- 洛谷 P4838 P哥破解密码 题解
矩阵乘法 + 快速幂优化递推: 看到这个题目我们不难想到递推,题干中说3个连续的A出现在序列中是不合法的,所以可以分为三种情况: (1):序列前只有一个A,如:BA,BBA,BABA. (2):序列前 ...
- [洛谷P4838]P哥破解密码
题目大意:求长度为$n$的$01$串中,没有连续至少$3$个$1$的串的个数 题解:令$a_1$为结尾一个$1$的串个数,$a_2$为结尾两个$1$的串的个数,$b$为结尾是$0$的串的个数.$a_1 ...
- P4838 P哥破解密码
题目背景 P哥是一个经常丢密码条的男孩子. 在ION 8102赛场上,P哥又弄丢了密码条,笔试满分的他当然知道这可是要扣5分作为惩罚的,于是他开始破解ION Xunil系统的密码. 题目描述 定义一个 ...
- [Luogu] P4838 P哥破解密码
题目背景 P哥是一个经常丢密码条的男孩子. 在ION 8102赛场上,P哥又弄丢了密码条,笔试满分的他当然知道这可是要扣5分作为惩罚的,于是他开始破解ION Xunil系统的密码. 题目描述 定义一个 ...
- 洛谷P2380 狗哥采矿
P2380 狗哥采矿 题目背景 又是一节平静的语文课 狗哥闲来无事,出来了这么一道题 题目描述 一个n*m的矩阵中,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是 ...
- 洛谷——P2383 狗哥玩木棒
P2383 狗哥玩木棒 题目背景 狗哥又趁着语文课干些无聊的事了... 题目描述 现给出一些木棒长度,那么狗哥能否用给出的木棒(木棒全用完)组成一个正方形呢? 输入输出格式 输入格式: 输入文件中的第 ...
- 洛谷 P2380 狗哥采矿
题目背景 又是一节平静的语文课 狗哥闲来无事,出来了这么一道题 题目描述 一个n*m的矩阵中,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是多少.最北边有blog ...
- 洛谷 P2383 狗哥玩木棒
题目背景 狗哥又趁着语文课干些无聊的事了... 题目描述 现给出一些木棒长度,那么狗哥能否用给出的木棒(木棒全用完)组成一个正方形呢? 输入输出格式 输入格式: 输入文件中的第一行是一个整数n表示测试 ...
- 洛谷 P1079 Vigenère 密码
目录 题目 思路 \(Code\) 题目 P1079 Vigenère 密码 思路 字符串+模拟.仔细读题,然后仔细敲代码(说了和没说一样)... \(Code\) #include<iostr ...
随机推荐
- Oracle 角色及其权限
一.简介 Oracle权限分为系统权限和对象权限. 1.系统权限 注意:系统权限不支持级联回收,所以你需要使用sysdba一个个的回收. 2.对象权限 注:对象权限支持级联回收,系统权限不支持级联回收 ...
- 【MFC】消息大全
转自:http://www.cnblogs.com/orez88/articles/2119450.html 消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了.例如,单击鼠标.改变 ...
- 关于重定向printf出错 Error[Pe020]: identifier "FILE" is undefined 解决方案
IAR或者Keil用到重定向printf函数出现的错误解决方案 转发请注明出处,谢谢 原创:李剀 https://www.cnblogs.com/kevin-nancy/articles/105851 ...
- ActivityGroup和TabActiviy的差异性?
TabActivity功能比较专一,就是做主界面Activity切换用的,所以定制性方面也就限制了许多,而且修改麻烦,不便于维护.ActivityGroup也是用来管理多个Activity的,但是功能 ...
- [linux] uptime 命令中关于平均负载的解释
1.当前时间 00:13:25 2.系统已运行的时间 9小时19分 3.当前在线用户 2 user 4.平均负载:0.17, 0.12, 0.07 最近1分钟.5分钟.15分钟系统的负载 为了更好地理 ...
- pat00-自测3. 数组元素循环右移问题 (20)
00-自测3. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 一个数组A中存有N(N>0)个整数,在 ...
- 文档碎片DocumentFragment
文档碎片是什么? 参考标准的描述,DocumentFragment是一个轻量级的文档对象,能够提取部分文档的树或创建一个新的文档片段,换句话说有文档缓存的作用. createDocumentFragm ...
- easyui-textbox 绑定事件
$('#Id').textbox({ inputEvents: $.extend({},$.fn.textbox.defaults.inputEvents,{ keyup:function(event ...
- WSAAsyncSelect 消息模型
select 模型虽然可以管理多个socket,但是它涉及到一个时机的问题,select模型会针对所管理的数组中的每一个socket循环检测它管理是否在对应的数组中,从时间复杂度上来说它是O(n^2) ...
- iDempiere 使用指南 绿色版一键启动测试环境
Created by 蓝色布鲁斯,QQ32876341,blog http://www.cnblogs.com/zzyan/ iDempiere官方中文wiki主页 http://wiki.idemp ...