[HDU 4565] So Easy! (数学)
来源:互联网 发布:2016年网络搜索话题 编辑:程序博客网 时间:2024/06/05 20:46
HDU - 4565
求
这题有个取整,看起来似乎根本没法用快速幂,没法做
实际上需要一点数学技巧
特别注意到,题目提出了
由于刚刚提到的条件,所以
而展开这个式子,可以发现
所以 Fn是一个整数,事实上,
以上是这题最为关键的一步
然后我们要得到
化简完,可以得到
剩下的就很简单了,构造矩阵然后快速幂之
这题有一个坑点,就是求 F1和 F2的时候
最好用 ceil直接求,不要用转化后的式子
因为标程似乎就是 ceil求的,有精度误差
用没有误差的方式求,可能反倒会错
#include <cstdio>#include <iostream>#include <cstdlib>#include <cstring>#include <algorithm>#include <cmath>#include <map>#include <set>#include <queue>using namespace std;typedef pair<int,int> Pii;typedef long long LL;typedef unsigned long long ULL;#define MST(a,b) memset(a,b,sizeof(a))#define CLR(a) MST(a,0)#define Pow2(a) (a*a)int MOD;struct Matrix{ int siz; int n[5][5]; Matrix(int tsiz=0):siz(tsiz){CLR(n);} void E(){CLR(n);for(int i=0; i<siz; i++) n[i][i]=1;} Matrix operator * (const Matrix &v) const { Matrix tem(siz); for(int i=0; i<siz; i++) for(int j=0; j<siz; j++) for(int k=0; k<siz; k++) tem.n[i][j]=(tem.n[i][j]+(LL)n[i][k]*v.n[k][j]+MOD)%MOD; return tem; }};int A,B,N;int main(){ while(~scanf("%d%d%d%d", &A, &B, &N, &MOD)) { int F1=(LL)ceil(A+sqrt(B))%MOD; int F2=(LL)ceil((A+sqrt(B))*(A+sqrt(B)))%MOD; if(N==1) {printf("%d\n", F1);continue;} if(N==2) {printf("%d\n", F2);continue;} N-=2; Matrix ans(2),tem(2); ans.E(); tem.n[0][0]=2*A; tem.n[0][1]=B-Pow2(A); tem.n[1][0]=1; tem.n[1][1]=0; while(N) { if(N&1) ans=ans*tem; tem=tem*tem; N>>=1; } printf("%d\n", ((LL)ans.n[0][0]*F2+(LL)ans.n[0][1]*F1)%MOD); } return 0;}
0 0
- [HDU 4565] So Easy! (数学)
- 数学-HDU 4565 so easy
- HDU 4565 So Easy!(数学+矩阵快速幂)
- HDU 4565 So Easy!(矩阵快速幂+数学)
- HDU-4565 So Easy!(数学&&矩阵快速幂)
- Hdu 4565 So Easy! (数学 构造矩阵)
- HDU 5650:so easy【数学】
- HDU 5650 so easy(数学找规律)
- HDU 4565 So Easy!
- hdu 4565 So Easy!
- HDU 4565 So Easy!
- hdu 4565 So Easy!
- HDU 4565 So Easy!
- hdu 4565 So Easy!
- HDU 4565 So Easy!
- hdu 4565 So Easy!
- hdu 4565So Easy!
- hdu 4565 So Easy!
- Java泛型的理解
- 如何修改MySQL监听IP地址
- Android 银行卡扫描识别获取卡号
- Centos 搭建NFS
- Qt5.3.2在ARM-Linux平台的移植
- [HDU 4565] So Easy! (数学)
- 使用Zxing框架进行二维码扫描
- unable to find a version of the runtime to run this application.
- 生成jni头文件的一种方法
- x86体系下Linux中的任务切换与TSS
- EFI、UEFI、MBR、GPT的区别
- sphinx搭建亿级搜索
- 项目经验分享--今天数据库的一张表挂了is marked as crashed and last (automatic?) repair failed
- 织梦把普通地图改为xml