So Easy!

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 910    Accepted Submission(s): 247

Problem Description
A sequence S n 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 S n.
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 < 2 15, (a-1) 2< b < a 2, 0 < b, n < 2 31.The input will finish with the end of file.
Output
For each the case, output an integer S n.
Sample Input
2 3 1 2013 2 3 2 2013 2 2 1 2013
Sample Output
4 14 4
题目大意: 题目意思很好懂,主要是小数的n次方不好处理,如果简单的将整数小数隔离开来,然后对整数对m求余。会有漏洞,前面的数据再乘上后面的小数会产生新的数字,对结果有影响。 
           解题思路:下来之后看了下题解,都是直接找一个共轭的(a-sqrt(b))^n一加便组成了整数。以前一直以为共轭只能存在于复数中。a+bi与a-bi共轭之类的。看来还要请教一下自己的高中老师。
           下面是自己的推论,组成了整数之后一切都好办了,然后往下推,可以得到一个间接递推公式,然后转化成矩阵。
快速幂的思想:我也是第一次用这个,所以说下感想,主要是普通的递推或者直接矩阵转换超时。所以用快速幂来求解。比如某个矩阵的31次方,可以写成(1+2*(1+2*(1+2*(1+2)))),只需要八次左右的运算,就可以了,首先31&1=1,那么就分解一个1出来,然后p*ret,然后就变成了偶数30,将p矩阵变成p^2,n变成15,&1=1直接用p*ret这时候p已经是p^2了,如此反复最后便可以把它求出来。  和求一个数的快速幂是一样的原理。
            
           题目地址:So Easy!
AC代码:
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
__int64 a,b,n,m;
__int64 ret[2][2],p[2][2],tmp[2][2];void init()
{ret[0][0]=2*a;ret[0][1]=-(a*a-b);ret[1][0]=1;ret[1][1]=0;p[0][0]=2*a;p[0][1]=-(a*a-b);p[1][0]=1;p[1][1]=0;
}void cal1()   //矩阵的平方!&1
{int i,j,k;for(i=0;i<2;i++)for(j=0;j<2;j++){tmp[i][j]=p[i][j];p[i][j]=0;}for(i=0;i<2;i++)for(j=0;j<2;j++)for(k=0;k<2;k++)p[i][j]=((p[i][j]+tmp[i][k]*tmp[k][j])%m+m)%m;
}void cal2()   //矩阵的乘法&1
{int i,j,k;for(i=0;i<2;i++)for(j=0;j<2;j++){tmp[i][j]=ret[i][j];ret[i][j]=0;}for(i=0;i<2;i++)for(j=0;j<2;j++)for(k=0;k<2;k++)ret[i][j]=((ret[i][j]+tmp[i][k]*p[k][j])%m+m)%m;
}void fastmi()
{n-=2;while(n){if(n&1){cal2();n--;}else{cal1();n>>=1;}}
}int main()
{while(~scanf("%I64d%I64d%I64d%I64d",&a,&b,&n,&m)){if(n==1){printf("%I64d\n",2*a%m);continue;}init();fastmi();//C1=2*a  C0=2printf("%I64d\n",((ret[0][0]*2*a+ret[0][1]*2)%m+m)%m);}return 0;
}

转载于:https://www.cnblogs.com/bbsno1/p/3260445.html

HDU 4565So Easy!2012长沙邀请赛A题(共轭构造+矩阵的快速幂)相关推荐

  1. 题35.C++练习-3-3快速幂 等比数列求和

    文章目录 题35.C++练习-3-3快速幂 等比数列求和 一.题目 二.题解 题35.C++练习-3-3快速幂 等比数列求和 一.题目 二.题解 本题若使用等比数列求和公式+快速幂当然会因为幂结果数据 ...

  2. 循环矩阵的快速幂(bzoj 2510: 弱题)

    2510: 弱题 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 408  Solved: 218 [Submit][Status][Discuss] ...

  3. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

  4. HDU 1576 A/B(数论简单题,求逆元)

    A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  5. 2012年职称计算机,职称计算机考试2012年word2003真题试题

    职称计算机考试2012年word2003真题试题 导语:为帮助考生有效备考2017年职称计算机考试,百分网小编整理了职称计算机历年真题,希望对您通过职称计算机考试有所帮助! 1 设置显示操作向导. 2 ...

  6. HDU - 4990 Reading comprehension(矩阵快速幂,水题)

    题目链接:点击查看 题目大意:给出一段程序,进行优化后提交 题目分析:其实就是找规律,大水题一个,偶尔也是需要做做水题找找自信(逃) 先将题目中的程序拿下来,跑上100项,然后拿到oeis里找一下规律 ...

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

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

  8. 【 HDU - 5363】Key Set(水题,快速幂,组合数学)

    题干: soda has a set SS with nn integers {1,2,-,n}{1,2,-,n}. A set is called key set if the sum of int ...

  9. HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )

    题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...

最新文章

  1. python dry原则_python使用建议与技巧分享(一)
  2. 【CV论文阅读】Rank Pooling for Action Recognition
  3. Oracle中如何获取当天时间的最开始的时间和最结尾的时间:
  4. excel营销数据分析宝典 pdf_你见过最漂亮的 Excel 表格什么样?
  5. android AVB2.0(六)Super动态分区介绍
  6. DNS服务启动时卡在:Generating /etc/rndc.key:
  7. Windows Server 2008 R2 Tomcat 开机自启动
  8. 真·不怪云原生:探寻IT大厂逐渐云化的秘密!
  9. 华为 静态路由与FTP备份
  10. 非参数统计单样本非参数检验之符号检验
  11. 破解工具之调试器和相关破解案例视频教程大全
  12. 华为USG6000V防火墙的初始密码及修改密码的操作
  13. 机器学习 --- 概率图 - 概述
  14. html5 m3u8 直播,html5 让video支持m3u8播放
  15. C6455CSL芯片支持库:第二节 EMAC外设
  16. zcmu1684 求余数
  17. amd为什么还用针脚_闲聊CPU针脚 一年一换都怪AMD不给力?
  18. 微软工程院 硕士_微软工程院招聘NLP算法研究员实习生|NLP算法工程师实习生_北京实习招聘...
  19. 安卓开发 -- 定时重启设备
  20. 分类模型训练完之后,测试效果极差可能原因分析

热门文章

  1. python学了可以干什么-学了Python都能干什么,哪个最赚钱?
  2. python科学计算基础教程pdf下载-用Python做科学计算 高清晰PDF
  3. python批量下载文件-python使用selenium实现批量文件下载
  4. python培训好学吗-开平北大青鸟:Python培训怎么选?Python好学吗?
  5. python学费多少-培训python学费多少?
  6. python读音有道词典-利用python实现命令行有道词典的方法示例
  7. python学精通要多久-学习Python零基础需要学多久?
  8. python程序员在公司都是做什么的-为什么企业很难招聘到好的python程序员?
  9. python安装第三方库-python第三方库的四种安装方法
  10. 用python画简单的动物-使用Python的turtle画小绵羊