题面太丑了,就不复制了。

题意:F1=A; F2=B; Fn=D*Fn-1+C*Fn-2+P/i;求Fn。

思路:根据P/i的值划分区间,每个区间矩阵求。

带常数的矩阵:

#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int Mod=1e9+;
struct mat
{
int mp[][];
mat(){memset(mp,,sizeof(mp)); }
mat friend operator *(mat a,mat b)
{
mat res;
rep(k,,) rep(i,,) rep(j,,)
res.mp[i][j]=(res.mp[i][j]+((ll)a.mp[i][k]*b.mp[k][j]%Mod))%Mod;
return res;
}
mat friend operator ^(mat a,int x)
{
mat res;
rep(i,,) res.mp[i][i]=;
while(x){
if(x&) res=res*a; a=a*a; x>>=;
}return res;
}
}; int main()
{
int T,N,A,B,C,D,P,fcy;
scanf("%d",&T);
while(T--){
scanf("%d%d%d%d%d%d",&A,&B,&C,&D,&P,&N);
if(N==) {printf("%d",A); continue;}
if(N==) {printf("%d",B); continue;}
for(int i=,r;i<=N;i=r+){
int tmp=P/i;
if(tmp==) r=N;
else r=min(P/(P/i),N);
mat ans,base;
ans.mp[][]=B;ans.mp[][]=A; ans.mp[][]=;
base.mp[][]=D; base.mp[][]=C; base.mp[][]=tmp;
base.mp[][]=base.mp[][]=;
ans=(base^(r-i+))*ans;
if(r==N) fcy=ans.mp[][];
else B=ans.mp[][],A=ans.mp[][];
}
printf("%d\n",fcy);
}
return ;
}

最新文章

  1. xampp 端口冲突
  2. react参考项目001
  3. HDU 1005 F(Contest #1)
  4. 建立mvc过程
  5. WinForm------GridControl右键添加动态菜单
  6. 计数排序 + 线段树优化 --- Codeforces 558E : A Simple Task
  7. spring事务失效
  8. CopyU!下一次更新将增加对设备厂商及型号的识别!
  9. Junit 源码剖析(一)
  10. MySQL重置root密码的几种方法(windows+Linux)
  11. wordpress主题制作结构文件
  12. 算法:1!+(1!+3!)+(1!+3!+5!) + ( 1! + 3! + 5! + 7! + 9!)+....+(1!+3!+5!+ ... + m!)
  13. linux系统命令学习系列-用户切换命令su,sudo
  14. 数据文件实时同步(rsync + sersync2)
  15. springboot整合mybatis和mybatis-plus
  16. 常用基础Linux操作命令总结与hadoop基础操作命令
  17. Spring根据包名获取包路径下的所有类
  18. 阿里云服务器Centos7.4开放80端口的记录
  19. Codeforces Round #481 (Div. 3)题解
  20. DOM LEVEL 1 中的那些事儿[总结篇-上]

热门文章

  1. LeetCode: Max Consecutive Ones
  2. jmeter之报告和分析
  3. 【Java】流与文件(端口 &amp; 文件读写对象)
  4. COS-4进程及进程管理
  5. 华丽的使用sublime写lua~ sublime lua相关必装插件推荐~~
  6. [POI2012] BEZ-Minimalist Security
  7. java基础(4)--运算符及表达式
  8. 分享:SQL优化器简介
  9. socket 关于同一条TCP链接数据包到达顺序的问题
  10. Shell 概述、截取字符操作等