P4910 帕秋莉的手环
题目背景
帕秋莉是蕾米莉亚很早结识的朋友,现在住在红魔馆地下的大图书馆里。不仅擅长许多魔法,还每天都会开发出新的魔法。只是身体比较弱,因为哮喘,会在咏唱符卡时遇到麻烦。
她所用的属性魔法,主要是生命和觉醒的“木”,变化和活动的“火”,基础和不动的“土”,果实和丰收的“金”,寂静和净化的“水”,机动和攻击的“日”,被动和防御的“月”七种属性
没有窗户的图书馆或许充满了灰尘,不过她认为在书旁边才是自己,所以她不能从书的旁边离开。这样已经一百年了。
题目描述
经过数年魔法的沉淀,帕秋莉将她那浩瀚无边的魔法的一部分浓缩到了一些特质的珠子中。
由于帕秋莉爱好和平,她只把象征生命和觉醒的木属性魔法和果实和丰收的金属性魔法放入了珠子中。
她认为光要这些珠子没有什么用处,于是她想将这些珠子串成魔法手环,这样就好看多了。于是,她拿出来用来串这些珠子的线 - 雾雨灵径。
她将这些珠子串到一起之后发现了一些性质:一段雾雨灵径的颜色是由两边的珠子的属性决定的,当一段雾雨灵径连接的两个珠子中只要有一个是金属性的,那么这段雾雨灵径的颜色就为金色
帕秋莉想要一个全都是金色的手环,而且她还想知道一共有多少种方案。由于她还要研究新的魔法,她就把这件事交给了你。由于她的魔法浩瀚无边,她有无穷的珠子
她并不想看着好几十位的数字,于是你需要对 1000000007 进行取模
输入输出格式
输入格式:
输入包含多组数据
第一行一个正整数 TTT ,表示数据组数。
之后每组数据有一个 nnn 代表木属性珠子和金属性珠子的总个数
输出格式:
对于每组数据,输出取模后的方案数
输入输出样例
2
5
20
11
15127
3
9
99
999
76
281781445
445494875
5
123
1234
12345
123456
1234567
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 ;
}
P4910 帕秋莉的手环的更多相关文章
- [Luogu] P4910 帕秋莉的手环
题目背景 帕秋莉是蕾米莉亚很早结识的朋友,现在住在红魔馆地下的大图书馆里.不仅擅长许多魔法,还每天都会开发出新的魔法.只是身体比较弱,因为哮喘,会在咏唱符卡时遇到麻烦. 她所用的属性魔法,主要是生命和 ...
- 洛谷 P4910 帕秋莉的手环 矩阵乘法+快速幂详解
矩阵快速幂解法: 这是一个类似斐波那契数列的矩乘快速幂,所以推荐大家先做一下下列题目:(会了,差不多就是多倍经验题了) 注:如果你不会矩阵乘法,可以了解一下P3390的题解 P1939 [模板]矩阵加 ...
- 【题解】Luogu P4910 帕秋莉的手环
原题传送门 "连续的两个中至少有1个金的"珂以理解为"不能有两个木相连" 我们考虑一个一个将元素加入手环 设f\([i][0/1]\)表示长度为\(i\)手环末 ...
- [洛谷P4910]帕秋莉的手环
题目大意:有一个$n(n\leqslant10^{18})$个点的环,每个点可以是$0$或$1$,要求相邻点中至少一个$1$,问方案数,多组询问. 题解:先考虑是一条链的情况,令$f_{i,j}$表示 ...
- 洛谷 P4910 帕秋莉的手环
题意 多组数据,给出一个环,要求不能有连续的\(1\),求出满足条件的方案数 \(1\le T \le 10, 1\le n \le 10^{18}\) 思路 20pts 暴力枚举(不会写 60pts ...
- 【Cogs2187】帕秋莉的超级多项式(多项式运算)
[Cogs2187]帕秋莉的超级多项式(多项式运算) 题面 Cogs 题解 多项式运算模板题 只提供代码了.. #include<iostream> #include<cstdio& ...
- cogs 998. [東方S2] 帕秋莉·诺蕾姬
二次联通门 : cogs 998. [東方S2] 帕秋莉·诺蕾姬 交上去后发现自己没上榜 就想着加点黑科技 把循环展开一下 结果WA了.. 万恶的姆Q /* cogs 998. [東方S2] 帕秋莉· ...
- P4915 帕秋莉的魔导书(动态开点线段树)
题目背景 帕秋莉有一个巨大的图书馆,里面有数以万计的书,其中大部分为魔导书. 题目描述 魔导书是一种需要钥匙才能看得懂的书,然而只有和书写者同等或更高熟练度的人才能看得见钥匙.因此,每本魔导书都有它自 ...
- COGS2187 [HZOI 2015] 帕秋莉的超级多项式
什么都别说了,咱心态已经炸了... question 题目戳这里的说... 其实就是叫你求下面这个式子的导函数: noteskey 其实是道板子题呢~ 刚好给我们弄个多项式合集的说... 各种板子粘贴 ...
随机推荐
- 用adb来修改android嵌入式设备的system只读目录下的东西
转的一篇: 以修改hosts文件为例: 由于某些原因,可能需要指定域名对应的IP地址.Android是基于Linux的系统,与Linux类似,通过hosts文件来设置. 在Android下,/etc是 ...
- git pull fatal: refusing to merge unrelated histories
1.首先我github有个远程仓库,然后我本地有个仓库 本地仓库我新添加了一个文件,然后我去关联(git remote add origin git@github.com:qshilary/gitte ...
- JUC——线程同步锁(ReentrantLock)
ReentrantLock简介 ReentrantLock是一个可重复的互斥锁,又被称为独占锁,可重入的意思是:ReentrantLock锁可以被单个线程多次获取.但是在同一个时间点只能被一个线程锁持 ...
- 【SIKIA计划】_06_Unity2D游戏开发-拾荒者笔记
[新增分类]Animations 动画——Animation——AnimatorControllerPrefabs 预制 [素材导入]unitypackage 素材包Sprites Editor 编辑 ...
- Lwip:原生态的Linux socket应用如何移植到Lwip上
lwIP - A Lightweight TCP/IP stack 在上一篇中,我们了解到在OpenFastPath上如何移植原生态的Linux Socket应用程序,那么,对于另外一个老牌的小型TC ...
- linux-shell-screen后台调用-后台运行脚本和命令-仿start命令-伪窗口界面
序 我比较熟练bat.cmd脚本.刚接触使用shell时,总会习惯想用windows窗口界面来套用shell脚本.于是找到screen后台命令,它可以交互shell脚本,保持后台运行.但是在批处理ba ...
- dumpe2fs命令详解
基础命令学习目录首页 dumpe2fs 显示ext2.ext3.ext4文件系统的超级快和块组信息.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE ...
- 关于如何使用dubbo管理控制台的一些感想
1.起因 因java项目需要准备安装一个dubbo-admin管理后台研究使用,无奈github上并没有看到dubbo-admin的目录着实让人着急.百度引擎上一些文章也不靠谱!真是浪费时间!所以又 ...
- django_models后台管理myarya
arya重点代码 # urls.py from django.urls import path,re_path,include from arya.service import v1 urlpatte ...
- 解决maven update project 后项目jdk变成1.5
http://blog.csdn.net/jay_1989/article/details/52687934