【HDU 1588】 Gauss Fibonacci
【题目链接】
【算法】
要求
f(g(0)) + f(g(1)) + f(g(2)) + ... + f(g(n-1))
因为g(i) = k * i + b
所以原式 = f(b) + f(k+b) + f(2k+b) + .... + f((n-1)k+b)
令矩阵A = {1,1,0,1}(求斐波那契数的矩阵)
那么,式子就可以写成A^b + A^(k + b) + A ^ (2k + b) + .... + A ^ ((n - 1)k + b)
因为矩阵符合乘法分配律,所以可以将A^b提出,式子被写成 :
A ^ b( E + A ^ k + A ^ 2k + ... + A ^ (n - 1)k ) (其中E为2阶单位阵)
令矩阵S = A ^ k
那么式子就被进一步化简为 : A^b( S^0 + S^1 + S^2 + .. + S^(n-1) )
A^b可以通过矩阵乘法快速幂求出
而后面的S^0 + S^1 + S ^ 2 + ... S^(n-1)则可以通过二分求解(也就是POJ 3233的方法)
【代码】
#include<bits/stdc++.h>
using namespace std; int n,b,k,m;
struct Matrix
{
long long mat[][];
} A,E,ans,s; inline Matrix mul(Matrix a,Matrix b)
{
int i,j,k;
Matrix ans;
memset(ans.mat,,sizeof(ans.mat));
for (i = ; i <= ; i++)
{
for (j = ; j <= ; j++)
{
for (k = ; k <= ; k++)
{
ans.mat[i][j] = (ans.mat[i][j] + a.mat[i][k] * b.mat[k][j]) % m;
}
}
}
return ans;
}
inline Matrix add(Matrix a,Matrix b)
{
int i,j;
Matrix ans;
memset(ans.mat,,sizeof(ans.mat));
for (i = ; i <= ; i++)
{
for (j = ; j <= ; j++)
{
ans.mat[i][j] = (a.mat[i][j] + b.mat[i][j]) % m;
}
}
return ans;
}
inline Matrix power(Matrix a,int n)
{
int i,j;
Matrix ans,p = a;
for (i = ; i <= ; i++)
{
for (j = ; j <= ; j++)
{
ans.mat[i][j] = (i == j);
}
}
while (n > )
{
if (n & ) ans = mul(ans,p);
p = mul(p,p);
n >>= ;
}
return ans;
}
inline Matrix solve(Matrix a,int n)
{
Matrix tmp;
if (n == ) return a;
if (n % == ) return add(solve(a,n-),power(a,n));
else
{
tmp = solve(a,n/);
return add(tmp,mul(power(a,n/),tmp));
}
} int main() { E.mat[][] = ; E.mat[][] = ;
E.mat[][] = E.mat[][] = ;
while (scanf("%d%d%d%d",&k,&b,&n,&m) != EOF)
{
A.mat[][] = A.mat[][] = A.mat[][] = ;
A.mat[][] = ;
s = power(A,k);
ans = mul(power(A,b),add(E,solve(s,n-)));
printf("%lld\n",ans.mat[][]);
} return ; }
【HDU 1588】 Gauss Fibonacci的更多相关文章
- -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】
[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...
- 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题
[HDU 3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...
- 【HDU 5647】DZY Loves Connecting(树DP)
pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...
- 【HDU 2196】 Computer(树的直径)
[HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...
- 【HDU 2196】 Computer (树形DP)
[HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...
- 【HDU 5145】 NPY and girls(组合+莫队)
pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...
- 【hdu 1848】Fibonacci again and again
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...
- 【hdu 1043】Eight
[题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...
- 【HDU 3068】 最长回文
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...
随机推荐
- 第二周习题O题
Description Given a graph (V,E) where V is a set of nodes and E is a set of arcs in VxV, and an or ...
- Vue页面骨架屏(一)
在开发webapp的时候总是会受到首屏加载时间过长的影响,主流的解决方法是在载入完成之前显示loading图效果,而一些大公司会配置一套服务端渲染的架构来解决这个问题.考虑到ssr所要解决的一系列问题 ...
- MBP 2018 & Mac keyboard shortcuts
MBP 2018 & Mac keyboard shortcuts https://support.apple.com/en-us/HT201236 delete key === Contro ...
- SBT 模板不完全总结,后续待填
; ; ; ; ){ ; &&k<T[r].key)||(T[r].right==&&k>T[r].key)){ ); } ...
- UVA 1995 I can guess the structer
模 拟 /*by SilverN*/ #include<algorithm> #include<iostream> #include<cstring> #inclu ...
- nyoj_176_整数划分(二)_201404261715
整数划分(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 把一个正整数m分成n个正整数的和,有多少种分法? 例:把5分成3个正正数的和,有两种分法: 1 1 3 ...
- Mayor's posters POJ - 2528
The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign h ...
- SOJ 3300_Stockholm Coins
[题意]给n个数,求一个数,使这个数能且只能由(n个数每个至少出现一次)表示.输出满足条件的最小的数. [分析](完全背包)如果有满足条件的最小的数,那么这个数只能是这n个数的和total,通过记录每 ...
- Count the Colors-ZOJ1610(线段树区间求)
Painting some colored segments on a line, some previously painted segments may be covered by some th ...
- java 8种基本类型与对应的包装类
数据类型 包装类 字节长度 默认值 有效位 byte Byte 1 0 -128~127 short Short 2 0 -32768~32767 int Integer 4 0 -2^31-1~2^ ...