我的名字不可能那么难记

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 16            测试通过 : 9

描述

Nirvava:Hi,Misaki,听说ZC要离开了..

Misaki:好走不送,祝一帆风顺…

Nirvana: 但他留了好多doge给我们…

Misaki:……

Nirvana:而且他们还有名字,名字如下。

据说ZC离去的原因之一就是因为第N个doge老是问他能不能记住它的名字。

Misaki:记别人名字什么的,好烦哒,ZC肯定记不住。

Nirvana:ZC当然记得,毕竟是他的宠物嘛。难倒他的是,doge的第二个问题:我的名字有多长。ZC难住了,因为他数着数着就doge精神污染了。

Misaki:这个问题,,真的好难..不过,,他们应该能解决。

PS:这个题面是不是有点熟♂悉,懒得想题面了,就把以前的题面拿出来了。

输入

多组输入

每组一个N(0<N<=10^9)

输出

第N个doge的名字有多长,由于可能太长,你只需要输出长度%1000000007(1e9+7)的结果即可。

样例输入

1
2
3
4
500

样例输出

1
3
7
17
875025602

提示

name[1]="X"
name[2]="XXY"
name[3]="XXYXXYX"
name[4]="XXYXXYXXXYXXYXXXY"
……
以此类推。
分析:设a[i]为总长度,b[i]为X的个数,c[i]为Y的个数,则有a[i]=3*b[i-1]+c[i-1],b[i]=2*b[i-1]+c[i-1],c[i]=b[i-1].
则可构造矩阵
|0,0,0|
|a[i-1] ,b[i-1],c[i-1]|*|3,2,1|=|a[i],b[i],c[i]|
|1,1,0|

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 1000000007
#define inf 0x3f3f3f3f
#define N 1000010
using namespace std;
struct matrix
{LL m[3][3];
};
LL n;
matrix mult(matrix a,matrix b)
{matrix c;memset(c.m,0,sizeof(c.m));for(int i=0;i<3;i++)for(int k=0;k<3;k++){if(a.m[i][k]==0)continue;for(int j=0;j<3;j++){if(b.m[k][j]==0)continue;c.m[i][j]+=a.m[i][k]*b.m[k][j]%mod;c.m[i][j]%=mod;}}return c;
}
matrix quickmod(matrix a,LL n)
{matrix temp;memset(temp.m,0,sizeof(temp.m));for(int i=0;i<3;i++)temp.m[i][i]=1;while(n){if(n&1)temp=mult(temp,a);a=mult(a,a);n>>=1;}return temp;
}int main()
{while(scanf("%lld",&n)!=EOF){if(n==1){puts("1");continue;}matrix ans;memset(ans.m,0,sizeof(ans.m));ans.m[0][0]=0;ans.m[0][1]=0;ans.m[0][2]=0;ans.m[1][0]=3;ans.m[1][1]=2;ans.m[1][2]=1;ans.m[2][0]=1;ans.m[2][1]=1;ans.m[2][2]=0;ans=quickmod(ans,n-1);printf("%lld\n",ans.m[1][0]);}
}

View Code

转载于:https://www.cnblogs.com/lienus/p/4189904.html

西南民大oj(矩阵快速幂)相关推荐

  1. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)E.飞行棋(期望dp+矩阵快速幂)

    题目 飞行棋的规则如下: 1.每名玩家有一个棋子,每个回合可以掷一次骰子. 2.如果使用的骰子为 k面,则这 k面上的点数分别为 1,2,3,-,k,且掷得每种点数的概率均为​. 3.如果当前回合掷得 ...

  2. 矩阵快速幂 | 北邮OJ | 96. 矩阵幂

    https://vpn.bupt.edu.cn/http/10.105.242.80/problem/p/96/ reference: https://www.cnblogs.com/cmmdc/p/ ...

  3. c语言求佩尔方程的解设计思路,c语言版 佩尔方程求最小正整数解及第k解(矩阵快速幂)...

    佩尔方程讲解连接: 若一个丢番图方程具有以下的形式: 且 为正整数,则称此方程为佩尔方程(英文:Pell's equation 德文:Pellsche Gleichung) 若 是完全平方数,则这个方 ...

  4. D: Starry的神奇魔法(矩阵快速幂)

    题目链接:https://oj.ismdeep.com/contest/Problem?id=1284&pid=3 D: Starry的神奇魔法 Time Limit: 1 s      Me ...

  5. 快速幂或者矩阵快速幂

    快速幂或者矩阵快速幂在算大指数次方时是很高效的,他的基本原理是二进制,下面的A可以是一个数也可以是一个矩阵(本文特指方阵),若是数就是快速幂算法,若是矩阵就是矩阵快速幂算法,用c++只需把矩阵设成一个 ...

  6. 快速幂 + 矩阵快速幂

    快速幂 1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #define LL lo ...

  7. [HNOI2008]GT考试[矩阵快速幂+kmp优化的dp]

    解题思路:假如说我们用f[i]表示长度为i的串能组合成无不吉利数字的组合的个数的话我们无法找到f[i]和f[i+1]的关系,就是我们下一位填某个数字会不会出现不吉利串,这就和你前面的串末尾于不吉利串重 ...

  8. HDU4549 M斐波那契数列(矩阵快速幂+费马小定理)

    Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) ...

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

    51nod 算法马拉松18 B 非010串 矩阵快速幂 非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串 ...

最新文章

  1. sgdisk 磁盘操作命令
  2. 初识redis(redis基础命令)
  3. DataFrame表样式设置(二)
  4. 电路常识性概念(2)-电容
  5. 【 Date 对象 参考手册】
  6. c ++查找字符串_C ++结构| 查找输出程序| 套装1
  7. 荣耀老熊科普荣耀9X升降全面屏 一升一降皆是技术的沉淀
  8. libvirt-virsh命令
  9. POJ - 2485(最小生成树.prime)
  10. 因服务器配置不当,热门直播平台 Twitch 的125GB 数据和源代码被泄露
  11. L1-065 嫑废话上代码 (5 分)-PAT 团体程序设计天梯赛 GPLT
  12. java 监听端口_java游戏服务器检查报告(经验分享)
  13. HTML:让img标签和input标签水平对齐一样高
  14. 目录 1. 管理的门槛 1 1.1. 资历作为一个年龄效应 1 1.2. 高层次知识结构的构建与提升 系统层面及战略层面的问题时 1 2. ,一类是绝对年龄效应,另一类是相对年龄效应。 1 2.1.
  15. 毕业设计——英文文献下载
  16. 使用TortoiseGit处理冲突亲测
  17. 计算机操作系统-1-总览
  18. deepin驱动精灵_深度Linux Deepin系统安装教程使用体验
  19. sandisk主控量产工具_[转载]群联PS3109主控固态硬盘修复教程_固态修复案例方法...
  20. 利用Python实现scissors-rock-paper-lizard-Spock小游戏

热门文章

  1. Nginx http keepalive提升链接效率
  2. 页面中的多选框的非空判断
  3. CTF的一道安卓逆向
  4. Scala中集合类型与java中集合类型转换
  5. 使用reactjs做一个CRUD功能
  6. Python-描述符
  7. Tomcat工作原理
  8. 各种安卓对话框代码合集
  9. 关于在Android中一个XML文件包含另外一个XML的方法
  10. ACM的java 傻瓜式教学