题目背景

帕秋莉是蕾米莉亚很早结识的朋友,现在住在红魔馆地下的大图书馆里。不仅擅长许多魔法,还每天都会开发出新的魔法。只是身体比较弱,因为哮喘,会在咏唱符卡时遇到麻烦。

她所用的属性魔法,主要是生命和觉醒的“木”,变化和活动的“火”,基础和不动的“土”,果实和丰收的“金”,寂静和净化的“水”,机动和攻击的“日”,被动和防御的“月”七种属性

没有窗户的图书馆或许充满了灰尘,不过她认为在书旁边才是自己,所以她不能从书的旁边离开。这样已经一百年了。

题目描述

经过数年魔法的沉淀,帕秋莉将她那浩瀚无边的魔法的一部分浓缩到了一些特质的珠子中。

由于帕秋莉爱好和平,她只把象征生命和觉醒的木属性魔法和果实和丰收的金属性魔法放入了珠子中。

她认为光要这些珠子没有什么用处,于是她想将这些珠子串成魔法手环,这样就好看多了。于是,她拿出来用来串这些珠子的线 - 雾雨灵径。

她将这些珠子串到一起之后发现了一些性质:一段雾雨灵径的颜色是由两边的珠子的属性决定的,当一段雾雨灵径连接的两个珠子中只要有一个是金属性的,那么这段雾雨灵径的颜色就为金色

帕秋莉想要一个全都是金色的手环,而且她还想知道一共有多少种方案。由于她还要研究新的魔法,她就把这件事交给了你。由于她的魔法浩瀚无边,她有无穷的珠子

她并不想看着好几十位的数字,于是你需要对 1000000007 进行取模

输入输出格式

输入格式:

输入包含多组数据

第一行一个正整数 TTT ,表示数据组数。

之后每组数据有一个 nnn 代表木属性珠子和金属性珠子的总个数

输出格式:

对于每组数据,输出取模后的方案数

输入输出样例

输入样例#1:

2
5
20
输出样例#1:

11
15127
输入样例#2:

3
9
99
999
输出样例#2:

76
281781445
445494875
输入样例#3:

5
123
1234
12345
123456
1234567
输出样例#3:

528790589
200102666
537707871
262341000
534036342

说明

这里给出 n=5 时,样例的解释

使用 1,2,3,4,5 来代表各个珠子

可行的方案是

{1,3,5},{1,2,4},{1,3,4},{2,3,5},{2,4,5}

{1,2,3,4},{1,2,3,5},{1,2,4,5},{1,3,4,5},{2,3,4,5}

{1,2,3,4,5}

对于 20% 的数据,有 1≤n≤10 ;

对于 40% 的数据,有 1≤n≤102

对于 60% 的数据,有 1≤n≤106

对于 90% 的数据,有 1≤n≤109

对于全部的数据,有 1≤T≤10,1≤n≤1018

Solution:

  本题矩阵快速幂。

  直接打一张小一点的表,然后就能找出规律,得到递推关系:$f[1]=1,f[2]=3…f[i]=f[i-1]+f[i-2]$。

  不难发现这就是个类斐波那契数列,于是直接矩乘。

代码:

/*Code by 520 -- 10.8*/
#include<bits/stdc++.h>
#define il inline
#define ll long long
#define RE register
#define For(i,a,b) for(RE int (i)=(a);(i)<=(b);(i)++)
#define Bor(i,a,b) for(RE int (i)=(b);(i)>=(a);(i)--)
#define clr(p) memset(&p,0,sizeof(p))
using namespace std;
const int mod=1e9+;
struct matrix{
int r,c;ll a[][];
}; il matrix mul(matrix x,matrix y){
matrix tp; clr(tp);
tp.r=x.r,tp.c=y.c;
For(i,,x.r-) For(j,,y.c-) For(k,,x.c-)
tp.a[i][j]=(tp.a[i][j]+x.a[i][k]*y.a[k][j]%mod)%mod;
return tp;
} int main(){
int T;scanf("%d",&T);
matrix ans,tp; clr(ans),clr(tp);
ans.r=,ans.c=; tp.r=tp.c=;
while(T--){
ll n;
scanf("%lld",&n);
ans.a[][]=,ans.a[][]=;
tp.a[][]=,tp.a[][]=tp.a[][]=tp.a[][]=;
while(n){
if(n&) ans=mul(ans,tp);
n>>=,tp=mul(tp,tp);
}
printf("%lld\n",ans.a[][]);
}
return ;
}

最新文章

  1. 在macbook上搭建ubuntu工作环境
  2. u盘中放入大于4g单独文件失败解决
  3. [转]Git调用第三方对比工具beyondCompare
  4. Python解析器源码加密系列之(一):标准c的tmpfile()、tmpfile_s()生成的临时文件究竟放在哪里了?
  5. java performance
  6. Oracle -&gt;&gt; 生成测试数据
  7. While reading xxx.png pngcrush caught libpng error: Not a PNG file..
  8. daxuez.com
  9. 高级Bash脚本编程指南
  10. 关于SpringMVC和Struts2的区别
  11. PHP面向对象编程
  12. 了解&lt;hx&gt;标签,为你的网页添加标题
  13. jquery 图片滚动
  14. UVA 712 S-Trees
  15. spring 源码之 ioc 容器的初始化和注入简图
  16. A. Alyona and Numbers(CF ROUND 358 DIV2)
  17. 深入浅出分析MySQL MyISAM与INNODB索引原理、优缺点、主程面试常问问题详解
  18. PHP中对汉字进行UNICODE编码和解码的实现
  19. SpringMVC系列之(二) springMVC和Struts异同
  20. mac 使用iTerm2快捷登录远程服务器

热门文章

  1. Cloud Native Weekly | 华为云抢先发布Redis5.0,红帽宣布收购混合云提供商 NooBaa
  2. 阿里云Linux的mysql安装,使用yum安装
  3. 【Go】Mac上安装Go
  4. 使用maven&amp;&amp;make-distribution.sh编译打包spark源码
  5. (1) Python 数据类型功能
  6. XAMPP安装PHP_GMP
  7. Gdiplus的使用
  8. Python爬虫框架Scrapy学习笔记原创
  9. 记一次线上gc调优的过程
  10. 学习pl/sql之一