题意:

      给你一短代码,让你优化这个代码,代码如下

#pragma comment(linker, "/STACK:1024000000,1024000000")

#include <cstdio>

#include<iostream>

#include <cstring>

#include <cmath>

#include <algorithm>

#include<vector>

const int MAX=100000*2;

const int INF=1e9;

int main()

{

  int n,m,ans,i;

  while(scanf("%d%d",&n,&m)!=EOF)

  {

    ans=0;

    for(i=1;i<=n;i++)

    {

      if(i&1)ans=(ans*2+1)%m;

      else ans=ans*2%m;

    }

    printf("%d\n",ans);

  }

  return 0;

},给出n,m让你输出ans   <1<=n, m <= 1000000000>.

思路:

      直接跑肯定TLE,这个题目我们可以推公式,如果推不出来可以直接打出来一些,然

后自己找公式,一般公式不会很复杂(复杂的自己一般不会呵呵)。

现在我们要求ai:

如果i是奇数 

a[i] = a[i-1] * 2 + 1 = (a[i-2] * 2 + a[i-1]) + 1 = a[i-2]*2+a[i-1]+1

如果i是偶数

a[i] = a[i-1] * 2     = (a[i-2] * 2 + 1) + a[i-1] = a[i-2]*2+a[i-1]+1

两个公式一样,那么可以作为通式,然后就构造矩阵,之后跑快速幂就行了,矩阵也很好构

造,我构造下:

a1 a2 1       0  2  0      a2 a3 1 

          *   1  1  0

              0  1  1


#include<stdio.h>
#include<string.h>

__int64
M; typedef struct
{
__int64
mat[5][5];
}
A; A mat_mat(A a ,A b)
{

A c;
memset(c.mat ,0 ,sizeof(c.mat));
for(int
k = 1 ;k <= 3 ;k ++)
for(int
i = 1 ;i <= 3 ;i ++)
{
if(
a.mat[i][k])
for(int
j = 1 ;j <= 3 ;j ++)
c.mat[i][j] = (c.mat[i][j] + a.mat[i][k] * b.mat[k][j])%M;
}
return
c;
}
A quick_mat(A a ,int b)
{

A c;
memset(c.mat ,0 ,sizeof(c.mat));
c.mat[1][1] = c.mat[2][2] = c.mat[3][3] = 1;
while(
b)
{
if(
b&1) c = mat_mat(c ,a);
a = mat_mat(a ,a);
b >>= 1;
}
return
c;
} int main ()
{

A a;
int
n ,i;
while(~
scanf("%d %d" ,&n ,&M))
{

a.mat[1][1] = a.mat[1][3] = a.mat[2][3] = a.mat[3][1] = 0;
a.mat[2][1] = a.mat[2][2] = a.mat[3][2] = a.mat[3][3] = 1;
a.mat[1][2] = 2;
if(
n == 1)
{

printf("%d\n" ,1 % M);
continue;
}

a = quick_mat(a ,n-1);
__int64
Ans = 1 * a.mat[1][1] + 2 * a.mat[2][1] + 1 * a.mat[3][1];
printf("%I64d\n" ,Ans % M);
}
return
0;
}

hdu4990 矩阵快速幂的更多相关文章

  1. hdu4990矩阵快速幂

    就是优化一段代码,用矩阵快速幂(刚开始想到了转移矩阵以为是错的) 在搜题解时发现了一个神奇的网站:http://oeis.org/ 用来找数列规律 的神器.... 规律就是an=an-1+2*an-2 ...

  2. hdu4990 Reading comprehension 矩阵快速幂

    Read the program below carefully then answer the question.#pragma comment(linker, "/STACK:10240 ...

  3. 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)

    题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...

  4. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...

  5. 51nod 1113 矩阵快速幂

    题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> ...

  6. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...

  7. HDU5950(矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:f(n) = f(n-1) + 2*f(n-2) + n^4,f(1) = a , f(2 ...

  8. 51nod 1126 矩阵快速幂 水

    有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...

  9. hdu2604(递推,矩阵快速幂)

    题目链接:hdu2604 这题重要的递推公式,找到公式就很easy了(这道题和hdu1757(题解)类似,只是这道题需要自己推公式) 可以直接找规律,推出递推公式,也有另一种找递推公式的方法:(PS: ...

随机推荐

  1. 2.1 Python3基础-内置函数(print&input)

    >>返回主目录 源代码 # 内置函数:输入/输出 name = 'Portos' age = 18 sex = 'man' score = 99.5 print('Hello World! ...

  2. springmvc redis @Cacheable扩展(一)

    springmvc 中有自带的cache处理模块,可以是方法级别的缓存处理,那么在实际使用中,很可能自己造轮子,因为实际中永远会有更奇怪的需求点.比如: 1 清除缓存时候,能模糊的进行删除 2 针对不 ...

  3. 源码解析之 Mybatis 对 Integer 参数做了什么手脚?

    title: 源码解析之 Mybatis 对 Integer 参数做了什么手脚? date: 2021-03-11 updated: 2021-03-11 categories: Mybatis 源码 ...

  4. java实现回溯算法

    最近有在leetcode上面做算法题,已经遇到了两道回溯算法的题目,感觉一点思路都没有,现决定将java如何实现回溯算法做一次总结. 什么叫做回溯算法 (摘抄于百度百科) 回溯算法实际上一个类似枚举的 ...

  5. nginx提供网站首页的一个实例

    如果既想匹配'/'进行反向代理,同时又想通过nginx提供网站首页,可以在server中进行如下配置: user python; # 运行Nginx的用户 worker_processes auto; ...

  6. Android Studio 之创建自定义控件

    •前言 常用控件和布局的继承结构,如下图所示: 可以看到,我们所用的所有的控件都是直接或者间接的继承自View的: 所用的所有布局都是直接或者间接继承自ViewGroup的: View 是 Andro ...

  7. 微信开发者工具导入 wepy 项目“app.json 未找到”报错解决方法

    版本信息: 微信开发者工具:1.03.2101150 wepy:2.0 wepy/cli:6.14.8 问题描述 按照 wepy 文档中的步骤新建项目: $ npm install @wepy/cli ...

  8. MyBatis-Plus Generator自定义模板

    相信大家在开发过程中,应该都用过Mybatis-Plus的Generator,但是可能没有自定义过模板并使用. 每个项目都应该有一个从Controller层到Mapper层的通用模板,来去掉哪些简单的 ...

  9. PE学习前的一些小知识

    位移运算 1.与运算 & 2.或运算 | 3.非运算 ~ 4.异或运算 ^ 5.移位运算 <<  >> 内存分配,文件读写 宏定义说明 一.无参数的宏定义的一般形式为: ...

  10. CLUSTAL W论文解读

    CLUSTAL W: improving the sensitivity of progressive multiple sequence alignment through sequence wei ...