[ An Ac a Day ^_^ ] hdu 4565 数学推导+矩阵快速幂
从今天开始就有各站网络赛了
今天是ccpc全国赛的网络赛
希望一切顺利 可以去一次吉大 希望还能去一次大连
题意:
很明确是让你求Sn=[a+sqrt(b)^n]%m
思路:
一开始以为是水题 暴力了一发没过
上网看了一下才知道是快速幂
而且特征方程的推导简直精妙
尤其是共轭相抵消的构造 真的是太看能力了
(下图转自某大神博客)

特征方程是C^2=-2*a*C+(a*a-b)
然后用快速幂求解
临时学了下矩阵快速幂
从这道题能看出来
弄ACM真的要数学好
这不是学校认知的高数 线代 概率分数
而是一种数学思维
能想得到什么公式 会临场推导 这种能力才是最重要的
学校考试卷子上的分数只能证明你考试的能力
分数再高没有数学思维也是没用的
从这样的题才能看出来一个人的数学到底好不好
我的路还很远……
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<queue>
#define M(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
ll m;
struct matrix{
ll mt[][];
matrix mul(matrix a,matrix b){ //矩阵相乘
matrix c;
M(c.mt,);
for(int i=;i<;i++)
for(int j=;j<;j++)
for(int k=;k<;k++)
c.mt[i][j]+=(a.mt[i][k]*b.mt[k][j])%m; //这里要模m 要不会因为溢出WA
return c;
}
matrix fast_pow(matrix a,ll mod){ //快速幂
matrix result;
for(int i=;i<;i++)
for(int j=;j<;j++)
result.mt[i][j]=(i==j);
while(mod){
if(mod%) result=mul(result,a);
a=mul(a,a);
mod/=;
}
return result;
}
}mt;
int main(){
ll a,b,n;
while(scanf("%I64d%I64d%I64d%I64d",&a,&b,&n,&m)!=EOF){
mt.mt[][]=*a;
mt.mt[][]=;
mt.mt[][]=b-a*a;
mt.mt[][]=;
mt=mt.fast_pow(mt,n-);
ll ans=((*a*mt.mt[][]+*mt.mt[][])%m+m)%m; //这里取两次模因为第一次取模可能是负数
printf("%I64d\n",ans);
}
return ;
}
/* 2 3 1 2013
2 3 2 2013
2 2 1 2013 */
[ An Ac a Day ^_^ ] hdu 4565 数学推导+矩阵快速幂的更多相关文章
- HDU 4565 So Easy! 矩阵快速幂
题意: 求\(S_n=\left \lceil (a+\sqrt{b})^n \right \rceil mod \, m\)的值. 分析: 设\((a+\sqrt{b})^n=A_n+B_n \sq ...
- 2018.09.26 bzoj5221: [Lydsy2017省队十连测]偏题(数学推导+矩阵快速幂)
传送门 由于没有考虑n<=1的情况T了很久啊. 这题很有意思啊. 考试的时候根本不会,骗了30分走人. 实际上变一个形就可以了. 推导过程有点繁杂. 直接粘题解上的请谅解. 不得不说这个推导很妙 ...
- HDU.1575 Tr A ( 矩阵快速幂)
HDU.1575 Tr A ( 矩阵快速幂) 点我挑战题目 题意分析 直接求矩阵A^K的结果,然后计算正对角线,即左上到右下对角线的和,结果模9973后输出即可. 由于此题矩阵直接给出的,题目比较裸. ...
- HDU - 1005 Number Sequence 矩阵快速幂
HDU - 1005 Number Sequence Problem Description A number sequence is defined as follows:f(1) = 1, f(2 ...
- HDU 5950 - Recursive sequence - [矩阵快速幂加速递推][2016ACM/ICPC亚洲区沈阳站 Problem C]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 Farmer John likes to play mathematics games with ...
- HDU 6470 Count 【矩阵快速幂】(广东工业大学第十四届程序设计竞赛 )
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6470 Count Time Limit: 6000/3000 MS (Java/Others) ...
- HDU 6395 Sequence 【矩阵快速幂 && 暴力】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6395 Sequence Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 2604 递推 矩阵快速幂
HDU 2604 Queuing (递推+矩阵快速幂) 这位作者讲的不错,可以看看他的 #include <cstdio> #include <iostream> #inclu ...
- hdu 4506(数学,循环节+快速幂)
小明系列故事——师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
随机推荐
- js时间戳转换时间格式
function getLocalTime(time){ if(time > 0){ var dateStr = new Date(time * 1000); var str = "& ...
- 关于spring autowrie的5种方式
spring自动注入有5中方式,分别是: byName:根据自动注入类中的对象名字,会到配置文件中找相关id或者name的bean,如果找不到则不会匹配,如果找到多个bean,则会报错. byType ...
- MyBatis 3 与 Spring 4 整合关键
MyBatis 3 与 Spring 4 整合关键 MyBatis与Spring整合,首先需要一个Spring数据源.其次有两个关键,配置sqlSessionFactory时需要配置扫描sql映射xm ...
- vimtutor基础教程
第一讲: 1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键. h (左移) j (下行) k (上行) l (右移) 2. 欲 ...
- "The Application was unable to start correctly (0xc000007b). Click OK to close the application"
我有时将MFC编译成64位并运行,就会报这个错误. 后来查找原因,就在于系统中使用了错误的dll.比如这个程序要使用64位的dll,而你拷贝进去的是同名的32位dll.解决方法就是放置正确的dll. ...
- VMware虚拟机服务的vmware-hostd自动启动和停止
安装了虚拟机 任务管理器会出现vmware-hostd.exe 占用了80端口,导致xampp打不开,所以就想关闭vmware,解决方案如下: 开始——运行——services.msc,找到VM打头 ...
- mac 搭建node 开发环境记录
安装homebrew: enter 键 后 输入电脑密码 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/i ...
- H5移动端页面设计心得分享(转载)
去年JDC出了不少优秀的武媚娘…不,H5呢,大家都很拼,同时当然也积累了一些经验和教训,今天结合咱们的实战案例,从字体,排版,动效,音效,适配性,想法这几个方面好好聊一聊关于H5的设计,希望对同学们有 ...
- delphi 快捷键大全
************************* 1.功能键 2.组合键 3.其他快捷键 4.补充 5.补充1(带分类) 6.补充2 --Edit by 2013.1.14 ************ ...
- LeetCode 328. Odd Even Linked List C#
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...