Loj10222佳佳的 Fibonacci
Description


Analysis
10分:暴力+把m和n输反,你将获得10分的好成绩(Just like me.)
70分:暴力+把m和n输对,你将获得70分的好成绩
100分:矩阵加速
设
$ T(n)=1F_1+2F_2+3F_3+......+nF_n $
\(S(n)=F_1+F_2+F_3+......+F_n\)
则有:
\(n*S(n)-T(n)=(n-1)*F_1+(n-2)*F_2+(n-3)*F_3+......+1*F_{n-1}\)
移项可得
\(T(n)=n*S(n)-(n-1)*F_1+(n-2)*F_2+(n-3)*F_3+......+1*F_{n-1}\)
客官且慢,观察可以发现
\((n-1)*F_1+(n-2)*F_2+(n-3)*F_3+......+1*F_{n-1}\)
不就是S(1)~S(n-1)的前缀和么
所以再设
\(G(n)=G(n-1)+S(n)\)
但一项一项来太慢了
用矩阵加速吧
于是设矩阵
\([F(n-1),F(n),S(n),G(n)]\)
转移矩阵自然出来了
\([0,1,1,1]\)
\([1,1,1,1]\)
\([0,0,1,1]\)
\([0,0,0,1]\)
差一点就成阶梯矩阵了呢
So:
70:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n,mod,now,ans=3,a=1,b=1;
int main(){
cin>>n>>mod;
if(n==1){cout<<1%mod;return 0;}
if(n==2){cout<<3%mod;return 0;}
for(register int i=3;i<=n;++i){
now=(a+b)%mod;
a=b,b=now,ans=(ans+i%mod*now%mod)%mod;
}
cout<<ans;
return 0;
}
100:
#include<cstdio>
#include<cstring>
#define re register
#define in inline
#define int long long
in int read()
{
int s(0),b(0);char ch;
do{ch=getchar();if(ch=='-')b=-1;}while(ch<'0'||ch>'9');
while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
return b?-s:s;
}
int n,m;
struct mat{
int v[5][5];
mat operator*(const mat &t)const
{
mat c;
memset(c.v,0,sizeof(c.v));
for(re int i=1;i<=4;++i)
for(re int j=1;j<=4;++j)
for(re int k=1;k<=4;++k)
c.v[i][j]=(c.v[i][j]+v[i][k]*t.v[k][j]%m)%m;
return c;
}
}I,S,T;
in mat ksm(mat ba,int k)
{
mat ans=I;
while(k)
{
if(k&1) ans=ans*ba;
k>>=1;
ba=ba*ba;
}
return ans;
}
signed main()
{
n=read(),m=read();
I.v[1][1]=I.v[2][2]=I.v[3][3]=I.v[4][4]=1;
S.v[1][1]=S.v[1][2]=S.v[1][3]=S.v[1][4]=1;
T.v[1][1]=T.v[2][1]=T.v[2][2]=T.v[3][1]=T.v[3][2]=T.v[3][3]=T.v[3][4]=T.v[4][3]=1;
if(n==1){
printf("%lld\n",1ll%m);
return 0;
}
S=S*ksm(T,n-2);
int pn1=S.v[1][1];
S=S*T;
printf("%lld\n",(n%m*S.v[1][2]%m-pn1+m)%m);
return 0;
}
Loj10222佳佳的 Fibonacci的更多相关文章
- 佳佳的Fibonacci
#include<cstdio> #include<cstring> #include<iostream> #include<cmath> #inclu ...
- 一本通1644【例 4】佳佳的 Fibonacci
1644:[例 4]佳佳的 Fibonacci 时间限制: 1000 ms 内存限制: 524288 KB sol:搞了大概一个多小时什么结果都没,被迫去看题解,感觉自己菜到家了qaq ...
- 佳佳的 Fibonacci
佳佳的 Fibonacci \(f_n=f_{n-1}+f_{n-2},f_1=f_2=1\),求\(f_1+2f_2+3f_3+...+nf_nmod\ m,1≤n,m≤2^{31}-1\). 解 ...
- TYVJ P3407 佳佳的魔法照片 Label:语文很重要 语文很重要 语文很重要
描述 佳佳的魔法照片(mphoto.pas\c\cpp) [题目背景] 佳佳的魔法照片(Magic Photo):如果你看过<哈利•波特>,你就会知道魔法世界里的照片是很神奇的.也许是因为 ...
- vijosP1285 佳佳的魔法药水
vijosP1285 佳佳的魔法药水 链接:https://vijos.org/p/1285 [思路] 图论思想. 很巧妙. 如A+B=C,将AB之间连边,边权为C,用以找相连物品与合成物. 用Dij ...
- 【DFS】佳佳的魔法阵
[vijos1284]佳佳的魔法阵 背景 也许是为了捕捉猎物(捕捉MM?),也许是因为其它原因,总之,佳佳准备设计一个魔法阵.而设计魔法阵涉及到的最关键问题,似乎就是那些带有魔力的宝石的摆放…… 描述 ...
- P1875 佳佳的魔法药水
P1875 佳佳的魔法药水 题目描述 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样焦急 万分!治好 MM 的病只有一种办法,那就是传说中的 0 号药水 ……怎么样才能 ...
- vijos:P1285佳佳的魔法药水
背景 发完了k张照片,佳佳却得到了一个坏消息:他的MM得病了!佳佳和大家一样焦急万分!治好MM的病只有一种办法,那就是传说中的0号药水……怎么样才能得到0号药水呢?你要知道佳佳的家境也不是很好,成本得 ...
- 洛谷 P1875 佳佳的魔法药水
P1875 佳佳的魔法药水 题目描述 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样焦急 万分!治好 MM 的病只有一种办法,那就是传说中的 0 号药水 --怎么样才能 ...
- 洛谷—— P1875 佳佳的魔法药水
https://www.luogu.org/problemnew/show/1875 题目背景 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样焦急 万分!治好 MM 的 ...
随机推荐
- 使用php安装pcntl模块
想添加个php多进程任务,突然发现服务器上php不支持pcntl扩展,再看了下也没有phpize这个模块 首先看下当前php版本 [root@htest ~]# php -v PHP 5.3.3 (c ...
- fastjson使用-- @JSONField使用(转)
@JSONField可以配置到字段和方法上,那不同的配置有什么不同呢?下面我们就来看看具体配置到不同的方法上. 我们在创建实体类的时候,都要求属性必须创建get和set方法,否则fastjson将不会 ...
- Salesforce学习之路-admin篇
Salesforce是一款非常强大的CRM(Customer Relationship Management)系统,国外企业使用十分频繁,而国内目前仅有几家在使用(当然,国内外企使用的依旧较多),因此 ...
- IntelliJ IDEA 安装,配置,汉化
压缩包:加QQ:1594216971 一.先进行安装包下载安装(五步) 1.运行”IntelliJ IDEA 2018.1.exe“ 开始安装,点击next 2.选择idea安装目录(不建议安装在c盘 ...
- JQuery对于动态生成的标签绑定事件失效
JQuery对整个html文档进行dom操作后,我们要想动态绑定事件,有两种方法 1.在进行dom操作时,在标签中写上onclick="afun()" 2.利用document的操 ...
- 2018年蓝桥杯java b组第八题
标题:日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞" ...
- Github 入门1 (下载git , 连接本地库与github仓库)
/* 本篇建立在以注册GitHub账号的前提下*/ (1) 下载 git https://www.git-scm.com // win10 可以直接红色箭头标识的 Download 2.22.0 ...
- Centos安装PhantomJS
1.下载PhantomJS [root@liuge ~]# wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-l ...
- How to setup Electrum testnet mode and get BTC test coins
For some reason we need to use BTC test coins, but how to set up the Bitcoin testnet wallet and get ...
- IDEA 导入 Maven 项目后报错 cannot resolve symbol 解决办法
这两天整理项目,导入新的 Maven 项目时出现 cannot resolve symbol ,即使 rebuild 也没有用.解决办法如下: 1. File -> Close Project: ...