把式子变成a[i]+1 = p(a[i-1]+1)+q[a[i-2]+1],矩阵快速幂搞定。复杂度o(logn)

#include <iostream>
#include <cstdio>
using namespace std;
#define int long long
int x,y,p,q,n;
const int MOD = 1000000007;int fast_mod(int n)    // 求 (t^n)%MOD
{int t[2][2] = {1, 1, 1, 0};t[0][0] = p;t[0][1] = q;int ans[2][2] = {1, 0, 0, 1};  // 初始化为单位矩阵int tmp[2][2];    //自始至终都作为矩阵乘法中的中间变量 while(n){if(n & 1)  //实现 ans *= t; 其中要先把 ans赋值给 tmp,然后用 ans = tmp * t {for(int i = 0; i < 2; ++i)for(int j = 0; j < 2; ++j)tmp[i][j] = ans[i][j]; ans[0][0] = ans[1][1] = ans[0][1] = ans[1][0] = 0;  // 注意这里要都赋值成 0 for(int i = 0; i < 2; ++i)    //  矩阵乘法 {for(int j = 0; j < 2; ++j){for(int k = 0; k < 2; ++k)ans[i][j] = (ans[i][j] + tmp[i][k] * t[k][j]) % MOD;}}}//  下边要实现  t *= t 的操作,同样要先将t赋值给中间变量  tmp ,t清零,之后 t = tmp* tmp for(int i = 0; i < 2; ++i)for(int j = 0; j < 2; ++j)tmp[i][j] = t[i][j];t[0][0] = t[1][1] = 0;t[0][1] = t[1][0] = 0;for(int i = 0; i < 2; ++i){for(int j = 0; j < 2; ++j){for(int k = 0; k < 2; ++k)t[i][j] = (t[i][j] + tmp[i][k] * tmp[k][j]) % MOD;}}n >>= 1;}return ans[0][0]*x + ans[0][1]*y %MOD;
}main(){int T;cin>>T;while(T--){cin>>p>>q>>x>>y>>n;x += 1;y += 1;if(n < 2){if(n == 0){cout<<x-1%MOD<<endl;}else{cout<<y-1%MOD<<endl;}continue;}cout<<(fast_mod(n-1)-1+MOD)%MOD<<endl;} return 0;
}

北方大学 ACM 多校训练赛 第十五场 欢度6.18相关推荐

  1. 北方大学 ACM 多校训练赛 第十五场 买花

    显然是一个比较简单的离线查询问题. 本质上是对区间求集合的问题,按照区间右端点从小到大对区间进行排序,然后用一个指针curr表示当前正在考虑区间的最右侧位置,针对排好序区间[tarl,tarr],先查 ...

  2. 北方大学 ACM 多校训练赛 第十五场 数字游戏

    本题的意思是,给你1/2,1/2,1,2,4--2^(k-1) ,让你在左边的数列中添加+号或者-号,使得最终的答案为n即可. 思路: 我们知道上面这些数直接如果全部都填+号的话,那么最终得到的数为2 ...

  3. 北方大学 ACM 多校训练赛 第十五场 蜘蛛牌A

    题目描述 XCX最近迷上了玩蜘蛛牌.蜘蛛牌是windowsxp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比它大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌 ...

  4. 北方大学 ACM 多校训练赛 第四场 题解

    A. 恶魔包毁灭世界 已知一张二分图,问哪些边是二分图的可行边? 先跑最小流,再把残余网络建图,几个重要结论是: ·最小割的可行边(满流&&2点不在一个SCC中) ·最小割的必行边(可 ...

  5. 北方大学 ACM 多校训练赛 第五场(D. 节操大师 - 二分)

    Description MK和他的小伙伴们(共n人,且保证n为2的正整数幂)想要比试一下谁更有节操,于是他们组织了一场节操淘汰赛.他们的比赛规则简单而暴力:两人的节操正面相撞,碎的一方出局,而没碎的一 ...

  6. 2018牛客网暑假ACM多校训练赛(第三场)I Expected Size of Random Convex Hull 计算几何,凸包,其他...

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-I.html 题目传送门 - 2018牛客多校赛第三场 I ...

  7. 2018牛客网暑假ACM多校训练赛(第六场)I Team Rocket 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round6-I.html 题目传送门 - https://www.no ...

  8. UPC个人训练赛第十五场(AtCoder Grand Contest 031)

    传送门: [1]:AtCoder [2]:UPC比赛场 [3]:UPC补题场 参考资料 [1]:https://www.cnblogs.com/QLU-ACM/p/11191644.html B.Re ...

  9. 中国石油大学ACM俱乐部开放训练赛

    文章目录 中国石油大学ACM俱乐部开放训练赛 A. sciorz画画(凸多边形最优三角型剖分,区间DP) B. 奎奎发红包(贪心) C. 关于我转生变成史莱姆这档事(DFS) F. 求和(矩阵构造+矩 ...

最新文章

  1. Make GNN Great Again:图神经网络上的预训练和自监督学习
  2. 请问如何在出错后能恢复到改变设置前的状态?
  3. 【职场】税前110万
  4. bugku—— 代码审计 做题记录
  5. Acitivty生命周期
  6. C++(STL):23 ---序列式容器queue源码剖析
  7. Windows11怎么关机重启?Windows11的关机键在哪?
  8. php查找空白行,如何从PHP文本中删除空白行?
  9. 巨人网络辟谣史玉柱被警方带走:下午一直在上海总部开会
  10. python str转dict
  11. Python下载(Windows)
  12. salt 安装MySQL-python和过程
  13. stata15中文乱码_如何解决 Stata 14 的中文乱码问题
  14. 4.1 CMMI4级——CMMI4级简述
  15. 拉格朗日方程的三种推导方法之基于达朗贝尔原理推导
  16. 软工网络15团队作业4——Alpha阶段敏捷冲刺之Scrum 冲刺博客(Day4)
  17. java抢红包_Java 用Redis 实现抢红包功能
  18. SASAdvance认证考试要点
  19. 晨风机器人发送图片_晨风机器人基本使用说明
  20. 厦门大学计算机系教秘,周六上午计算机系举行青年教师教学工作量讨论会

热门文章

  1. suse linux 文件只可读,SUSE LINUX下文件系统变只读的问题解决
  2. 云南河道 kml文件_处理能力提升 4 倍 ,大疆智图 4 天完成 5 公里河道建模
  3. b+树时间复杂度_第15期:索引设计(索引组织方式 B+ 树)
  4. 如何区分netty是udp还是tcp_鲜奶粉还是大包粉,到底该如何区分?
  5. linux下rip服务启动失败,RIP协议_linux系统管理与服务的技术博客_51CTO博客
  6. 栈在前端中的应用,顺便再了解下深拷贝和浅拷贝!
  7. [C++11]final关键字的使用
  8. [蓝桥杯2018初赛]字母阵列-单向dfs
  9. php字符串类型详解,php数字类型之字符串类型详解
  10. 第三个一千行+500行总结-数据结构C复习--知识点总结3--七到九章