题面

题解

可以发现\(T(n)\)无法用递推式表示。

于是我们做如下变形:

\[T(n) = \sum _ {i = 1} ^ n i \times f_i \\
S(n) = \sum _ {i = 1} ^ n f_i \\
\therefore nS(n) - T(n) = \sum _ {i = 1} ^ {n - 1} (n - i)f_i \\
\]

令\(p(n) = nS(n) - T(n)\)

则\(p(n + 1) = p(n) + S(n)\)

用矩阵乘法即可。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define RG register
#define file(x) freopen(#x".in", "r", stdin);freopen(#x".out", "w", stdout); inline int read()
{
int data = 0, w = 1;
char ch = getchar();
while(ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
if(ch == '-') w = -1, ch = getchar();
while(ch >= '0' && ch <= '9') data = data * 10 + (ch ^ 48), ch = getchar();
return data * w;
} int n, Mod;
inline void Add(int &x, const int &y) { x += y; if(x >= Mod) x -= Mod; }
inline int Mul(const int &x, const int &y) { return 1ll * x * y % Mod; } template<int N, int M>
struct Matrix
{
int a[4][4];
Matrix() { memset(a, 0, sizeof(a)); }
inline int *operator [] (const int &id) { return a[id]; } template<int K> inline Matrix<N, K> operator * (const Matrix<M, K> &b) const
{
Matrix<N, K> c;
for(RG int i = 0; i < N; i++)
for(RG int j = 0; j < M; j++)
for(RG int k = 0; k < K; k++)
Add(c[i][k], 1ll * a[i][j] * b.a[j][k] % Mod);
return c;
}
}; Matrix<1, 4> S;
Matrix<4, 4> T; int main()
{
n = read(); Mod = read();
int Tmp = n; S[0][1] = T[0][0] = T[0][1] = T[0][2] = T[1][0] = T[1][2] = T[2][2] = T[2][3] = T[3][3] = 1;
while(Tmp)
{
if(Tmp & 1) S = S * T;
T = T * T, Tmp >>= 1;
} printf("%d\n", (Mul(n, S[0][2]) - S[0][3] + Mod) % Mod);
return 0;
}

最新文章

  1. Sublime Text 2 windows8安装插件失败解决
  2. Leetcode: Sequence Reconstruction
  3. 关于ckeditor 第二次加载 出现问题
  4. TOSHIBA TEC EXT Printer Z-Mode
  5. shutdown immediate时 hang住 (转载)
  6. Java反编译利器-Jad, Jode, Java Decompiler等及其IDE插件
  7. Codeforces 622F 「数学数论」「数学规律」
  8. Mac 版 QQ 可直接访问 iPhone 的相册 ?!
  9. Tern Server Timeout
  10. android ListView 多次调用 getView方法
  11. 【POJ 3669 Meteor Shower】简单BFS
  12. [ios] NSURL
  13. android KeyEvent for dot &quot;.&quot;
  14. 机器学习实战之 第10章 K-Means(K-均值)聚类算法
  15. 页面固定DIV层CSS代码
  16. ueditor显示内容末尾有多余标记的解决
  17. 第十课html5 新增标签及属性 html5学习5
  18. [BOI2004]Sequence 数字序列(左偏树)
  19. linux----------centos下添加环境变量
  20. swiper 父级元素display:none 之bug

热门文章

  1. python3通过qq邮箱发送邮件
  2. sqoop2启动client异常
  3. Android 配置文件 AndroidManifest 解析
  4. HDU 1301Jungle Roads(最小生成树 prim,输入比较特殊)
  5. COSTA Cross-layer Optimization for Sketch-based笔记与感受
  6. java基础——回文数判断
  7. 04_Docker入门(下)之docker镜像和仓库的使用
  8. Linux 三剑客之sed命令总结
  9. Redis集群入门
  10. Contract Helper