【题目链接】

点击打开链接

【算法】

要求

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的更多相关文章

  1. -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】

    [把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...

  2. 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题

    [HDU  3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...

  3. 【HDU 5647】DZY Loves Connecting(树DP)

    pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...

  4. 【HDU 2196】 Computer(树的直径)

    [HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...

  5. 【HDU 2196】 Computer (树形DP)

    [HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...

  6. 【HDU 5145】 NPY and girls(组合+莫队)

    pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...

  7. 【hdu 1848】Fibonacci again and again

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

  8. 【hdu 1043】Eight

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...

  9. 【HDU 3068】 最长回文

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...

随机推荐

  1. laravel学习笔记3--高级

    一.artisan 1.基本使用: 1.1.查看基本命令: php artisan 1.2.查看具体命名的使用: php artisan help migrate 1.3.创建控制器: php art ...

  2. Go:面向"对象"

    一.封装 封装的实现步骤: 将结构体.字段的首字母小写(不能被导出): 给结构体所在的包提供一个工厂模式的函数,首字母大写.类似一个构造函数: 提供一个首字母大写的方法,由于获取结构体属性的值. 二. ...

  3. Python之元祖

    Python之元祖 tuple ( ) 元组和列表是一样的.但是,也有区别. 元组只能有读操作.没有修改删除操作. 列表是用中括号 [ ] 表示. 元组是用小括号 ( ) 表示. dir() 把传入的 ...

  4. virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader, check that virtualenvwrapper.........(解决办法)

    Linux(ubuntu)上python2与python3共存环境下,安装virtualenvwrapper后, 其环境变量被自动设置为VIRTUALENVWRAPPER_PYTHON=/usr/bi ...

  5. YOLOv3测试命令

    一.老规矩 在darknet\build\darknet\x6下按住shift键,点击鼠标右键选择“在此处打开Powershell 窗口(s)” 二.测试图片命令: .\darknet detect ...

  6. Oracle 实现查询不区分大小写(设置数据库)

    转http://blog.csdn.net/shl7765856/article/details/7622756 查询数据的时候. SQL Server 默认 不区分大小写. 如果要区分,就要额外的设 ...

  7. 2018/08/23 cstring中memset()函数的运用

    好多东西其实以前已经查过了,然后当时理解的还行,可是过段时间没用有些又会忘记,然后又去找资料又查,浪费了不少的时间和精力,所以,我,曾国强,今天起,要好好做笔记了! 今天复习第一个知识点,为什么要叫复 ...

  8. Mybatis 处理日期格式自动转换

    java.lang.String和java.util.Date之间自动转换 @DateTimeFormat(pattern="yyyy-MM-dd")//页面写入数据库时格式化 @ ...

  9. POJ3107 树的重心

    题解:只不过如果有求多个点,输出所有方案. #include<cstring> #include<cmath> #include<iostream> #includ ...

  10. java中使用Protobuf的实例(Demo)

    由于Protobuf受到推崇,故尝试采用protobuf来摒弃传统的xml进行传输数据. 首先,需要下载的关于Protobuf的文件: 1.到http://code.google.com/p/prot ...