杭电2855 Fibonacci Check-up
是一道数论方面的题,融合了矩阵二分幂和多项式定理以及斐波那契数列的一道题。先用公式可以推出来,之后用矩阵二分幂就可以了。
关于矩阵二分幂,实际上就是矩阵的乘法,由于矩阵满足结合律,故可以用平方来计算,就达到了log(n)的复杂度,由于n可能为奇数,可能为偶数,所以当n为奇数时,还需要乘以初始矩阵。
ac代码:
#include <iostream>
#include <cmath>
#include <stdio.h>
using namespace std;
int m;
int matrix[2][2];//存储结果的矩阵
void cheng(int n){int x,y,z,w;//矩阵乘法运算x=((matrix[0][0]%m)*(matrix[0][0]%m))%m+((matrix[0][1]%m)*(matrix[1][0]%m))%m;y=((matrix[0][0]%m)*(matrix[0][1]%m))+((matrix[0][1]%m)*(matrix[1][1]%m));z=((matrix[1][0]%m)*(matrix[0][0]%m))+((matrix[1][1]%m)*(matrix[1][0]%m));w=((matrix[1][0]%m)*(matrix[0][1]%m))+((matrix[1][1]%m)*(matrix[1][1]%m));matrix[0][0]=x;matrix[0][1]=y;matrix[1][0]=z;matrix[1][1]=w;if(n%2){//乘初始矩阵x=(matrix[0][0]%m+matrix[0][1]%m)%m;y=matrix[0][0]%m;z=(matrix[1][0]%m+matrix[1][1]%m)%m;w=matrix[1][0]%m;matrix[0][0]=x;matrix[0][1]=y;matrix[1][0]=z;matrix[1][1]=w;}//取余运算matrix[0][0]%=m;matrix[0][1]%=m;matrix[1][0]%=m;matrix[1][1]%=m;
}
void dfs(int n){if(n==0){matrix[0][1]=0;return;}else if(n==1){matrix[0][1]=1;return;}dfs(n/2);if(n%2){//根据n的奇偶性判断是否需要乘初始矩阵cheng(1);}elsecheng(2);
}
int main(){//freopen("1.txt","r",stdin);int ncase;//数据组数scanf("%d",&ncase);while(ncase--){int n;scanf("%d%d",&n,&m);matrix[0][0]=1;matrix[0][1]=1;matrix[1][0]=1;matrix[1][1]=0;n=n*2;dfs(n);//求结果printf("%d\n",matrix[0][1]%m);}return 0;
}
转载于:https://www.cnblogs.com/javaspring/archive/2012/02/15/2656408.html
杭电2855 Fibonacci Check-up相关推荐
- 杭电 1272 poj 1308 小希的迷宫
这道题是我学了并查集过后做的第三个题,教我们的学姐说这是并查集的基础题,所以有必要牢牢掌握. 下面就我做这道题的经验,给大家一些建议吧!当然,我的建议不是最好的,还请各位大神指出我的错误来,我也好改正 ...
- 杭电OJ分类题目(3)
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(3) HDU Computational Ge ...
- 杭电OJ分类题目(2)
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(2) HDU Water~~~ HDU 100 ...
- 杭电 2544 最短路(bellman详解)
首先介绍一下bellman算法: Bellman-ford算法是求含负权图的单源最短路径算法,效率很低,但代码很容易写.即进行持续地松弛(原文是这么写的,为什么要叫松弛,争议很大),每次松弛把每条边都 ...
- 杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)
杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)[模板] 传送门 杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)[模板] 矩阵快速幂模板 Count Problem Descript ...
- 2022杭电多校第八场题解
2022杭电多校第八场 Theramore(思维) 题意 给定一个01字符串,每次可以将一个奇数长度的区间翻转,求操作后字典序最小的字符串. 分析 翻转奇数长度的区间,元素位置的奇偶性不变,统计奇数位 ...
- 【杭电数电实验】verilog入门指北
verilog入门指北 前言 指北内容 面向人群 基础实验 1-15 代码参考 正文 ISE 的安装 实验的基本操作流程 可能出现的问题 创建工程闪退 希望删除某一文件,实际上并没有删除 如何编写测试 ...
- 杭电oj11页 (c++) 31-40
杭电oj11页 (c++) 31-40 31.2031 32.2032 33.2033 34.2034 35.2035 36.2036 37.2037 39.2039 40.2040 31.2031 ...
- hdoj杭电问题分类
杭电上的题虽然多,但是一直苦于找不到问题分类,网页都是英文的,所以平时做题也没怎么看,今天仔细一看,问题分类竟然就在主页....做了那么久的题居然没发现,表示已经狗带..不要笑,不知道有没有像我一样傻 ...
最新文章
- Python中str.replace()的使用方法
- 每日一皮:这年头没点绝活连洗车都不行...
- PAT甲级1063 Set Similarity:[C++题解]哈希表、去重
- 跨时钟域电路设计——结绳法
- 拖动滑块拼图背景图没显示_计划B? 那是计划N…没什么。 拼图于2015年问世
- OPC DA通讯 KEP6.4 DCOM 配置脚本
- 如何通过一个SDK轻松搞定人脸识别,拯救初入职场的程序猿
- 博客园首页新随笔联系管理订阅订阅随笔- 610 文章- 0 评论- 83 阅读- 144万 Calendar时间获取天,周,月,季度,年度时间段
- 使用struts2中默认的拦截器以及自定义拦截器
- 阿里天池用Pandas揭秘美国选民的总统喜好附加题
- 触发C#Button的双击事件
- BDTC2016: 中航信 昆仑数据 兮易控股 宝信议题公布
- java服务器返回中文乱码:???
- 分析google关键词de工具
- 免费在excel密码破解--超好用
- 哪款蓝牙耳机耳朵不疼?久戴不疼的骨传导耳机
- 中国篆刻艺术孙溟㠭作品《无有中无尽藏》
- 在没有安装VC软件的电脑上也可以执行的exe文件
- hadoop集群搭建与使用
- CDN: trunk URL couldn't be downloaded