题意:

已知 \(X_i = a * X_{i - 1} + b * X_{i - 2}\),现给定\(X_0,X_1,a,b\),询问\(X^n \mod p\),其中\(n <= 10^{1e6}\)

思路:

显然这道题需要用到矩阵快速幂,但是因为\(n\)是百万位级别,直接快速幂复杂度为\(1e6 * log10 * 4 * C1\),超时。
所以我们可以用十进制矩阵快速幂,和二进制类似,复杂度为\(1e6 * 4 * C2\)。因为这里的\(n\)比较大,所以\(C2 < log10 * C1\)大概率发生。

代码:

#include<map>
#include<set>
#include<queue>
#include<cmath>
#include<stack>
#include<ctime>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<sstream>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e6 + 5;
const int INF = 0x3f3f3f3f;
const ull seed = 11;
const int MOD = 1e9 + 7;
using namespace std;
char s[maxn];
ll x0, x1, a, b, mod;
struct Mat{ll s[2][2];void init(){for(int i = 0; i < 2; i++)for(int j = 0; j < 2; j++)s[i][j] = 0;}
};
inline Mat pmul(Mat a, Mat b){Mat t;t.init();for(int i = 0; i < 2; i++){for(int j = 0; j < 2; j++){for(int k = 0; k < 2; k++){t.s[i][j] = (t.s[i][j] + a.s[i][k] * b.s[k][j]) % mod;}}}return t;
}
inline Mat ppow(Mat a, int b){Mat ret;ret.init();for(int i = 0; i < 2; i++) ret.s[i][i] = 1;while(b){if(b & 1) ret = pmul(ret, a);a = pmul(a, a);b >>= 1;}return ret;
}
inline Mat power(Mat a, char *s, int n){Mat ret;ret.init();for(int i = 0; i < 2; i++) ret.s[i][i] = 1;for(int i = n; i >= 1; i--){int x = s[i] - '0';if(x) ret = pmul(ret, ppow(a, x));a = ppow(a, 10);}return ret;
}
int main(){scanf("%lld%lld%lld%lld", &x0, &x1, &a, &b);scanf("%s%lld", s + 1, &mod);int n = strlen(s + 1);Mat ans, t;ans.init();ans.s[0][0] = x1, ans.s[0][1] = x0;t.s[0][0] = a, t.s[0][1] = 1, t.s[1][0] = b, t.s[1][1] = 0;t = power(t, s, n);ans = pmul(ans, t);printf("%lld\n", ans.s[0][1]);return 0;
}

转载于:https://www.cnblogs.com/KirinSB/p/11287343.html

牛客多校第五场B generator1(十进制矩阵快速幂)题解相关推荐

  1. subsequence 1(牛客多校第五场记忆化搜索+组合数学)

    链接:https://ac.nowcoder.com/acm/contest/885/G 来源:牛客网 题目描述 You are given two strings s and t composed ...

  2. 2021牛客多校第五场补题

    B-Boxes 链接:https://ac.nowcoder.com/acm/contest/11256/B 来源:牛客网 题目描述 There're nn_{}n​ boxes in front o ...

  3. 牛客15666 又见斐波那契(矩阵快速幂)

    链接:https://ac.nowcoder.com/acm/problem/15666 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  4. 牛客多校第五场7月31日补题记录

    B Boxes 题意:有 nnn 个盒子,每个盒子中装有黑球白球概率均为 12\displaystyle \frac{1}{2}21​.打开第 iii 个盒子所需代价为 wiw_iwi​.现在有一个机 ...

  5. 2020年牛客多校第五场C题-easy(纯组合计数不要生成函数的做法)

    文章目录 description solution code description 有TTT组测试数据 对于两个长度为KKK的数列{a}\{a\}{a}和{b}\{b\}{b},满足∑i=1Kai= ...

  6. 牛客多校第五场 G subsequence 1 最长公共子序列/组合数

    题意: 给定两个由数字组成的序列s,t,找出s所有数值大于t的子序列.注意不是字典序大. 题解: 首先特判s比t短或一样长的情况. 当s比t长时,直接用组合数计算s不以0开头的,长度大于t的所有子序列 ...

  7. 牛客多校第五场 A digits 2 签到

    题意: 给定一个n,输出一个数,要求这个数所有位之和整除n,并且这个数也整除n,并且位数不许多于1e4 题解: 把这个数n输出n遍. #include<iostream> using na ...

  8. 24dian(牛客多校第三场)

    24dian(牛客多校第三场) 题意: 给你n张牌,每张牌的大小为1 ~ 13,问这些牌与加减乘除任意组合(可以使用括号),且但所有的有效解在计算过程中都涉及到分数,即非整数,能否组成答案m,如果可以 ...

  9. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  10. 牛客多校第四场【B-Basic Gcd Problem】

    牛客多校第四场[B-Basic Gcd Problem] 题目链接:https://ac.nowcoder.com/acm/contest/5669/B 思路:先要理解公式,多看几个数据基本就会有点想 ...

最新文章

  1. 工作心得之-------关于“表现”
  2. 提高jQuery执行效率
  3. vc6.0打开工程出现程序崩了的原因
  4. VS如何更改项目类型?
  5. linux分区合并不损坏系统,更改磁盘分区后修复GRUB启动
  6. 在Linux环境下给php添加mbstring扩展
  7. 《javascript高级程序设计》笔记:Function类型
  8. 计算机数学基础模拟试题,计算机数学基础》模拟考试试题.doc
  9. 论文浅尝 | 知识图谱推理中表示学习和规则挖掘的迭代学习方法
  10. Linux工作笔记-CentOS 调整 home分区 扩大 root分区
  11. SpringBoot的@Conditional和自动配置类生效
  12. Python 清理项目的目录
  13. Google 出售 Performics
  14. YUV 和 YUV420
  15. 软件测试-常见数据库笔试题
  16. 系统发育树的美化~Figtree(图文教程)
  17. 软件工程各种UML总结
  18. Elasticsearch 拼音分词器
  19. Power Designer 概念数据模型导出 逻辑数据模型和物理数据模型 生成数据库脚本
  20. C++-求积分(面积)

热门文章

  1. 视频转换器如何将视频MKV转换成MP4格式
  2. centOS6.9下安装Redis
  3. 《精通 ASP.NET MVC 4》----1.5 ASP.NET MVC 4的新特性
  4. mysql 删除重复数据,需要给子查询的表,起一个别名
  5. 猫叫了,老鼠跑了!(复习委托和事件)
  6. Cocos2d-x-lua游戏两个场景互相切换MainScene01切换到MainScene02
  7. Mellanox infinoband RDMA SDP
  8. 【超清视频】SCCM2012精讲系列课程03:SCCM2012的基础环境初始化(一)
  9. 快速生成移动设备应用图标的在线工具 - makeappicon
  10. log4j-over-slf4j与slf4j-log4j12共存stack overflow异常