矩阵快速幂

转移矩阵很容易看出来,关键是p/i怎么处理。。

其实是有规律的。。第i项的p/i是x,那么第p / (p / i)项也是x。。且中间全是x。。

然后分段转移就行了

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define full(a, b) memset(a, b, sizeof a)
#define FAST_IO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
inline int lowbit(int x){ return x & (-x); }
inline int read(){int X = 0, w = 0; char ch = 0;while(!isdigit(ch)) { w |= ch == '-'; ch = getchar(); }while(isdigit(ch)) X = (X << 3) + (X << 1) + (ch ^ 48), ch = getchar();return w ? -X : X;
}
inline int gcd(int a, int b){ return b ? gcd(b, a % b) : a; }
inline int lcm(int a, int b){ return a / gcd(a, b) * b; }
template<typename T>
inline T max(T x, T y, T z){ return max(max(x, y), z); }
template<typename T>
inline T min(T x, T y, T z){ return min(min(x, y), z); }
template<typename A, typename B, typename C>
inline A fpow(A x, B p, C lyd){A ans = 1;for(; p; p >>= 1, x = 1LL * x * x % lyd)if(p & 1)ans = 1LL * x * ans % lyd;return ans;
}
const int MOD = 1e9 + 7;
ll a, b, c, d, p, n, _;
struct Matrix{ll m[3][3];Matrix(){full(m, 0);}
};
Matrix e;Matrix mul(Matrix &p, Matrix &q){Matrix ret;for(int i = 0; i < 3; i ++){for(int j = 0; j < 3; j ++){for(int k = 0; k < 3; k ++){ret.m[i][j] = (ret.m[i][j] % MOD + p.m[i][k] * q.m[k][j] % MOD) % MOD;}}}return ret;
}Matrix fpow(Matrix &x, ll p){Matrix ret = e;for(; p; p >>= 1, x = mul(x, x)){if(p & 1) ret = mul(ret, x);}return ret;
}int main(){FAST_IO;for(cin >> _; _; _ --){cin >> a >> b >> c >> d >> p >> n;e.m[0][0] = 1, e.m[1][1] = 1, e.m[2][2] = 1;if(n == 1) printf("%lld\n", a % MOD);else if(n == 2) printf("%lld\n", b % MOD);else{bool good = false;Matrix tmp;tmp.m[0][0] = d, tmp.m[0][1] = c, tmp.m[1][0] = 1, tmp.m[2][2] = 1;for(int i = 3; i <= n;){if(p / i == 0){Matrix t = tmp;t = fpow(t, n - i + 1);ll ans = (t.m[0][0] * b % MOD + t.m[0][1] * a % MOD + t.m[0][2]) % MOD;printf("%lld\n", ans);good = true;break;}else{Matrix t = tmp;t.m[0][2] = p / i;int j = min(n, p / (p / i));t = fpow(t, j - i + 1);ll nb = (t.m[0][0] * b % MOD + t.m[0][1] * a % MOD + t.m[0][2]) % MOD;ll na = (t.m[1][0] * b % MOD + t.m[1][1] * a % MOD + t.m[1][2]) % MOD;a = na, b = nb;i = j + 1;}}if(!good) printf("%lld\n", b % MOD);}}return 0;
}

转载于:https://www.cnblogs.com/onionQAQ/p/10946324.html

2018 Multi-University Training Contest 7 - Sequence相关推荐

  1. Sichuan University Programming Contest 2018 Preliminary

    嗯为了防止大家AK,所以这次的A题和K题我们就当做不存在好了! 经历了昨天写了两个多小时的博客没保存的心态炸裂,今天终于下了个Markdown.所以我猜这篇的格式应该会更好看一点! 好吧废话不多说 题 ...

  2. 2018 Multi-University Training Contest 3 Problem F. Grab The Tree 【YY+BFS】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6324 Problem F. Grab The Tree Time Limit: 2000/1000 MS ...

  3. 2018 Multi-University Training Contest 4 Problem E. Matrix from Arrays 【打表+二维前缀和】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6336 Problem E. Matrix from Arrays Time Limit: 4000/20 ...

  4. 2021 HZNU Winter Training Day 17 (2018 German Collegiate Programming Contest (GCPC 18))

    2021 HZNU Winter Training Day 17 (2018 German Collegiate Programming Contest (GCPC 18)) 题目 A B C D E ...

  5. 2018 Multi-University Training Contest 7 Age of Moyu

    Age of Moyu 来追梦 Problem Description Mr.Quin love fishes so much and Mr.Quin's city has a nautical sy ...

  6. HUST-2015 Multi-University Training Contest 9

    2015 Multi-University Training Contest 9 solutions BY xudyh 1001.Expression 记dp_{l,r}dp​l,r​​表示l,rl, ...

  7. 2016 Multi-University Training Contest 10

    solved 7/11 2016 Multi-University Training Contest 10 题解链接 分类讨论 1001 Median(BH) 题意: 有长度为n排好序的序列,给两段子 ...

  8. 2017 Multi-University Training Contest 4 solutions BY 陈松杨

    2017 Multi-University Training Contest 4 solutions BY 陈松杨 发表回复 1001. Big Integer 如果知道k-1k−1个数的个数c_1, ...

  9. HDU 6091 - Rikka with Match | 2017 Multi-University Training Contest 5

    思路来自 某FXXL 不过复杂度咋算的.. /* HDU 6091 - Rikka with Match [ 树形DP ] | 2017 Multi-University Training Conte ...

最新文章

  1. html css 隐藏和显示按钮
  2. mamp python mysql_Python,MySQL,MAMP怎么做?
  3. Delphi中拖动无边框窗口的5种方法
  4. Leecode大厂热题100道系列题解
  5. XML--使用XML来将字符串分隔成行数据
  6. P3642 [APIO2016]烟火表演(左偏树、函数)
  7. 某大厂外包员工在工作群抢新年红包,却被要求退回...
  8. 不要错过!第十一届CDA考试Level Ⅰ优秀考生采访
  9. matlab仿真怎么添加干扰信号,噪声干扰信号的matlab仿真
  10. 选择排序的Java代码实现(超详细代码)
  11. BP神经网络学习与代码预演
  12. 数据库工程师的几个发展方向
  13. Windows Server安全日志与系统事件变更审计
  14. 初学单片机:Proteus 8 和 keil 4的使用方法(Proteus 8 和 keil 4建立一个项目/文件)
  15. 图像仿射变换及图像扭曲(Image Warping)
  16. 618 都疯了吗?这些书居然都不到半价!
  17. MySQL5.7和MySQL8的区别
  18. 牛客小白月赛16——D 小阳买水果
  19. Fixcel电子表单——Excel导入
  20. Web微信小程序开发(一)

热门文章

  1. 跨行合并居中html标记语言,[前端Web]HTML语法最全解-建议收藏
  2. iis thinkphp隐藏index.php,thinkphp 隐藏index.php iis apache nginx
  3. 24点游戏java_Java实现24点小游戏
  4. java数组1 100偶数和_java – 数组偶数和奇数排序
  5. python帝国cms_Python的类
  6. docker 镜像_Docker镜像分层
  7. java List最大_在java中获取List集合中最大的日期时间操作
  8. 图像超分辨率近两年几篇优秀论文及代码
  9. 【Python进阶】Python进阶专栏、编程与开源框架知识星球上线,等你来follow
  10. 【深度学习图像项目实战-从入门到上线1】怎样学会科学的调研并启动一个项目...