HDUOJ 4565 So Easy!

Problem Description

A sequence Sn is defined as:

Where a, b, n, m are positive integers.┌x┐is the ceil of x. For example, ┌3.14┐=4. You are to calculate Sn.
  You, a top coder, say: So easy!

Input

There are several test cases, each test case in one line contains four positive integers: a, b, n, m. Where 0<a,m<215,(a−1)2<b<a2,0<b,n<2310< a, m < 2^{15}, (a-1)^2< b < a^2, 0 < b, n < 2^{31}0<a,m<215,(a−1)2<b<a2,0<b,n<231.The input will finish with the end of file.

Output

For each the case, output an integer Sn.

Sample Input

2 3 1 2013
2 3 2 2013
2 2 1 2013

Sample Output

4
14
4

非常经典的矩阵快速幂构造题:
首先看题目的条件 :
(a−1)2<b<a2(a-1)^2< b < a^2(a−1)2<b<a2
0<a−b<10<a-\sqrt{b}<10<a−b​<1 => 可以推出 a,ba,ba,b 必有一个是小数
(a−b)n<1(a-\sqrt{b})^n<1(a−b​)n<1
┌(a−b)n(a-\sqrt{b})^n(a−b​)n┐=1=1=1 => ┌(a+b)n(a+\sqrt{b})^n(a+b​)n┐=(a+b)n+(a−b)n(a+\sqrt{b})^n+(a-\sqrt{b})^n(a+b​)n+(a−b​)n
所以我们考虑构造:
s=(a+b)n+(a−b)ns=(a+\sqrt{b})^n+(a-\sqrt{b})^ns=(a+b​)n+(a−b​)n
下面找递推矩阵:
类比斐波那契数列,我们要找 Sn=pSn−1+qSn−2S_n=pS_{n-1}+qS_{n-2}Sn​=pSn−1​+qSn−2​
移项得推导方程:
S2−pS−q=0S^2-pS-q=0S2−pS−q=0
已知两解为:
S1=a+b,S2=a−bS_1=a+\sqrt{b},S_2=a-\sqrt{b}S1​=a+b​,S2​=a−b​
解得:
p=2a,q=a−b2p=2a,q=a-b^2p=2a,q=a−b2
所以得到递推矩阵:
[SnSn−1]=[2aa−b210][Sn−1Sn−2]\left[ \begin{matrix} S_n\\ S_{n-1} \end{matrix} \right]= \left[ \begin{matrix} 2a&a-b^2\\ 1&0\\ \end{matrix} \right] \left[ \begin{matrix} S_{n-1}\\ S_{n-2} \end{matrix} \right] [Sn​Sn−1​​]=[2a1​a−b20​][Sn−1​Sn−2​​]
AC代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod,n,A,B;
struct mat
{ll m[2][2];
}ans,a;void init(mat &a){memset(a.m,0,sizeof(a.m));for(int i=0;i<2;i++) a.m[i][i]=1;
}mat mul(mat a,mat b)
{mat c;memset(c.m,0,sizeof(c.m));for(int i=0;i<2;i++){for(int k=0;k<2;k++){if(a.m[i][k]==0) continue;for(int j=0;j<2;j++){c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%mod;if(c.m[i][j]<0) c.m[i][j]+=mod;}}}return c;
}mat mat_pow(mat a,ll k)
{mat ans;init(ans);while(k>0){if(k&1) ans=mul(a,ans);a=mul(a,a);k>>=1;}return ans;
}int main(){while(cin>>A>>B>>n>>mod){a.m[0][0]=2*A%mod;a.m[0][1]=((B-A*A%mod)+mod)%mod;a.m[1][0]=1;a.m[1][1]=0;ans.m[0][0]=2*A%mod;ans.m[1][0]=2%mod;ans=mul(mat_pow(a,n-1),ans);cout<<ans.m[0][0]<<endl;}return 0;
}

HDUOJ 4565 So Easy!相关推荐

  1. HDU - 4565 So Easy!(共轭构造+推公式+矩阵快速幂)

    题目链接:点击查看 题意:给出a,b,m,n,求 解析:题意一目了然,此题的关键是推出解决问题的公式. 首先,题目要求括号内n次方后向上取整再模m,而这里给到的a与b的关系接下来也会用到:<b& ...

  2. kuangbin带你飞专题合集

    题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...

  3. 算法学习经典例题整理

    陆续会对本篇博客进行更新! 搜索:https://vjudge.net/contest/292597 区间DP:https://vjudge.net/contest/293892 树状背包:https ...

  4. linux下eclipse开发storm,eclipse 通过maven 开发storm项目

    window系统安装java 这里下载jdk8....... 配置环境变量 1.安装完成后,右击"我的电脑",点击"属性",选择"高级系统设置&quo ...

  5. kuangbin带你飞 专题1-23 题单

    kuangbin大神,对于打过ACM比赛的ACMer,无人不知无人不晓. 在此,附上vjudge平台上一位大神整理的[kuangbin带你飞]专题目录链接. [kuangbin带你飞专题目录1-23] ...

  6. 老鱼的-kuangbin专题题解

    kuangbin专题问题一览 专题一 简单搜索 POJ 1321 棋盘问题 POJ 2251 Dungeon Master POJ 3278 Catch That Cow POJ 3279 Flipt ...

  7. So Easy!(HDU - 4565)

    Problem Description A sequence S n is defined as: Where a, b, n, m are positive integers.┌x┐is the c ...

  8. LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)

    LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...

  9. LeetCode刷题记录14——257. Binary Tree Paths(easy)

    LeetCode刷题记录14--257. Binary Tree Paths(easy) 目录 前言 题目 语言 思路 源码 后记 前言 数据结构感觉理论简单,实践起来很困难. 题目 给定一个二叉树, ...

  10. LeetCode刷题记录13——705. Design HashSet(easy)

    LeetCode刷题记录13--705. Design HashSet(easy) 目录 LeetCode刷题记录13--705. Design HashSet(easy) 前言 题目 语言 思路 源 ...

最新文章

  1. python扩展库丰富吗_python扩展库
  2. python整数和浮点数相乘_python中整数除法和浮点数到整数转换之间的区别是什么原因?...
  3. POJ - 3417 Network(树上差分)
  4. Spark _24 _读取JDBC中的数据创建DataFrame/DataSet(MySql为例)(三)
  5. 算法设计与分析——贪心算法——背包问题
  6. 记录6月28日的体验,自己现实的感触
  7. Spring Boot 分布式会话
  8. 和feign的区别_Feign的传参研究
  9. 双系统ubuntu 删除后重装
  10. [Python]学习基础篇:面向对象编程
  11. 如何按距离排序 php,php做附近的人,根据距离由近到远进行排序
  12. 如何开发Web3D游戏
  13. 非参数统计的Python实现—— Kruskal-Wallis 单因素方差分析
  14. stm32电容触摸按键实验
  15. 看老虎和狮子谁是兽中之王(国外学者详细论证)
  16. MAALA3.9_初等矩阵和等价 (Elementary Matrices and Equivalence)
  17. 未支付订单----倒计时
  18. Matplotlib文字处理
  19. c语言课程设计图书管理系统
  20. CSS基础-05-颜色取值、标签居中(了解即可)、综合案例-新闻内容

热门文章

  1. 华尔街日报评亚洲10大商界人物 王建宙等上榜
  2. 提问的智慧( 中文阅读笔记)#
  3. Windows 最全CMD命令,带死机修复系统命令
  4. 手机自动休眠与距离感应器失效的问题
  5. [数据库]MySQL表分区
  6. PCB板沉金工艺和喷锡工艺区别
  7. SAP ABAP 输出设备设置 LP01
  8. 立青博客:不是所有人都是Java大白
  9. 区域生长算法及其实现
  10. 【安全攻略】Thinkphp5.0检测上传的文件是否包含木马