HDU4565 So Easy! 矩阵高速幂外加数学
easy 个屁啊,一点都不easy,题目就是要求公式的值,但是要求公式在最后的取模前的值向上取整。再取模,无脑的先试了高速幂 double fmod来做,结果发现是有问题的。这题要做肯定得凑整数,凑整 题目给 a+√b 那么加上a-√b就能够了。但是这样加上后面怎么处理还得减去。想了半年也想不出来。
原来用了负数的共轭思想。还有就是题目给的b的范围 是 ((a-1)*(a-1),a*a)。所以 a-√b的值的 不管多少次方 的值都是小于1的,所以对于原式子 改装成
((a + √b) ^n+ (a - √b)^n)%MOD,这样由于(a + √b) ^n的值在取模前要向上取整么,所以加上了 (a - √b)^n 就是 答案了,特别变态。还得看b的范围来行事
最后在用 (a + √b) ^n+ (a - √b)^n 乘以 (a + √b)+ (a - √b)就能推出 (a + √b) ^(n+1) + (a - √b) ^(n+1) = 2 * a *((a + √b) ^n + (a - √b) ^n) - (a*a-b)*((a + √b) ^(n-1) + (a - √b) ^(n-1))
这样字的话 就有递推式可言了,就能构造矩阵来做了。最后还漏了负数的情况 ,搞的我敲了好几个小时。数学弱爆了。
#include<iostream>
#include<cstdio>
#include<list>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cmath>
#include<memory.h>
#include<set> #define ll long long #define eps 1e-8 #define inf 0xfffffff const ll INF = 1ll<<61; using namespace std; //vector<pair<int,int> > G;
//typedef pair<int,int > P;
//vector<pair<int,int> > ::iterator iter;
//
//map<ll,int >mp;
//map<ll,int >::iterator p; typedef struct Node {
int m[2][2];
}Matrix; Matrix per; int MOD; void init() {
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
per.m[i][j] = (i == j); } Matrix multi(Matrix a,Matrix b) {
Matrix c;
for(int i=0;i<2;i++) {
for(int j=0;j<2;j++) {
c.m[i][j] = 0;
for(int k=0;k<2;k++)
c.m[i][j] += a.m[i][k] * b.m[k][j];
c.m[i][j] %= MOD;
/*if(c.m[i][j] < 0) c.m[i][j] += MOD;*/
}
}
return c;
} Matrix quick(Matrix p,int k) {
Matrix ans = per;
while(k) {
if(k&1) {
ans = multi(ans,p);
k--;
}
else {
k >>= 1;
p = multi(p,p);
}
}
return ans;
} int main() {
int a,b,n;
init();
while(scanf("%d %d %d %d",&a,&b,&n,&MOD) == 4) {
Matrix ans;
memset(ans.m,0,sizeof(ans.m));
ans.m[1][0] = 2;
ans.m[0][0] = 2 * a;
if(n == 1) {
printf("%d\n",ans.m[0][0]%MOD);
continue;
}
Matrix tmp;
memset(tmp.m,0,sizeof(tmp.m));
tmp.m[0][0] = 2 * a%MOD;
tmp.m[0][1] = (-(a * a%MOD - b) + MOD)%MOD;//靠这里有负数要注意
tmp.m[1][0] = 1;
tmp.m[1][1] = 0;
/*Matrix bb = multi(tmp.tmp)*/
tmp = quick(tmp,n);
ans = multi(tmp,ans);
printf("%d\n",ans.m[1][0]);
}
return 0;
}
HDU4565 So Easy! 矩阵高速幂外加数学的更多相关文章
- hdu4565 So Easy! 矩阵快速幂
A sequence Sn is defined as: Where a, b, n, m are positive integers.┌x┐is the ceil of x. For example ...
- HDU 2256 Problem of Precision(矩阵高速幂)
题目地址:HDU 2256 思路: (sqrt(2)+sqrt(3))^2*n=(5+2*sqrt(6))^n; 这时要注意到(5+2*sqrt(6))^n总能够表示成an+bn*sqrt(6); a ...
- HDOJ How many ways?? 2157【矩阵高速幂】
How many ways? ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 5411 CRB and puzzle (Dp + 矩阵高速幂)
CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) T ...
- HDU3117-Fibonacci Numbers(矩阵高速幂+log)
题目链接 题意:斐波那契数列,当长度大于8时.要输出前四位和后四位 思路:后四位非常easy,矩阵高速幂取模,难度在于前四位的求解. 已知斐波那契数列的通项公式:f(n) = (1 / sqrt(5 ...
- ZOJ 3690 & HDU 3658 (矩阵高速幂+公式递推)
ZOJ 3690 题意: 有n个人和m个数和一个k,如今每一个人能够选择一个数.假设相邻的两个人选择同样的数.那么这个数要大于k 求选择方案数. 思路: 打表推了非常久的公式都没推出来什么可行解,好不 ...
- UVA 11551 - Experienced Endeavour(矩阵高速幂)
UVA 11551 - Experienced Endeavour 题目链接 题意:给定一列数,每一个数相应一个变换.变换为原先数列一些位置相加起来的和,问r次变换后的序列是多少 思路:矩阵高速幂,要 ...
- UVA10518 - How Many Calls?(矩阵高速幂)
UVA10518 - How Many Calls?(矩阵高速幂) 题目链接 题目大意:给你fibonacci数列怎么求的.然后问你求f(n) = f(n - 1) + f(n - 2)须要多少次调用 ...
- HDU2842-Chinese Rings(递推+矩阵高速幂)
pid=2842">题目链接 题意:求出最少步骤解出九连环. 取出第k个的条件是,k-2个已被取出,k-1个仍在支架上. 思路:想必九连环都玩过吧,事实上最少步骤就是从最后一个环開始. ...
随机推荐
- ajax请求携带 cookie
之前都有这样一个理解:ajax请求时是不会自动带上cookie的,要是想让他带上的话,必须哟啊设置withCredential为true.这个说法会让人产生完全扭曲的误解,我就是其中之一.完整的无歧义 ...
- 二进制与十进制的转化,bool str int 之间的转化,str的常用操作,
1.基础数据类型总览(7种) int: 整型,用于进行+-*/运算 str: 存储少量的数据;可加str,可乘数字,可切片,可进行9种常用操作 bool: True False 判断真假 list: ...
- UE4自学随笔(一)
本文及后续均为个人学习记录所用,难免毫无章法零零碎碎,希望看到此文的诸君勿怪. 一.Actor与Pawn Actor类 在UE4中,Actor类是可以放到游戏场景中的游戏对象的基本类型.你如果想放置任 ...
- 洛谷 P4932 浏览器 (思维题)
题目大意:给你一个序列,求满足$x_{i}\: xor\; x_{j}$在二进制下1的数量为奇数的数对数量 打月赛的时候真没想出来,还是我太弱.. xor意义下,对于两个数,假设它们两个每一位都是2个 ...
- 【codeforces 20B】Equation
[题目链接]:http://codeforces.com/contest/20/problem/B [题意] 给你一个方程,让你输出这个方程的解的情况. [题解] a==0,b==0,c==0时,为恒 ...
- Linux 环境下/etc/profile和/etc/profile.d 的区别
Linux 环境下/etc/profile和/etc/profile.d 的区别 区别: 1. 两个文件都是设置环境变量文件的,/etc/profile是永久性的环境变量,是全局变量,/etc/pro ...
- 洛谷——P2863 [USACO06JAN]牛的舞会The Cow Prom
https://www.luogu.org/problem/show?pid=2863#sub 题目描述 The N (2 <= N <= 10,000) cows are so exci ...
- 【试水CAS-4.0.3】第02节_CAS服务端登录页个性化
完整版见https://jadyer.github.io/2015/07/16/sso-cas-login-diy/ /** * @see ------------------------------ ...
- rest_framework 视图
视图: a.过去 class PagerView(View): pass b.现在 class Pager1View(APIView): pass c.rest_framework 基本没用 from ...
- [NOI2002] Robot 解题报告(数论+DP)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1408 Description 3030年,Macsy正在火星部署一批机器人. 第1秒,他 ...