题面:

传送门

思路:

看一眼这个公式:

$x\left[n+1\right]=\left(a\ast x\left[n\right]+c\right) mod m$

递推,数据范围$n\leq 10^18$,自然想到矩阵快速幂

构造如下矩阵:

状态矩阵:

$\begin{bmatrix}x\lbrack i\rbrack&1\end{bmatrix}$

转移矩阵:

$\begin{bmatrix}a&0\\c&1\end{bmatrix}$

从x[0]开始做转移矩阵的n次幂,再乘上状态矩阵即可

Code:

 // luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
inline ll read(){
ll re=,flag=;char ch=getchar();
while(ch>''||ch<''){
if(ch=='-') flag=-;
ch=getchar();
}
while(ch>=''&&ch<='') re=(re<<)+(re<<)+ch-'',ch=getchar();
return re*flag;
}
ll n,m,A,C,st,g;
ll mul(ll l,ll r){
ll re=;if(l<r) swap(l,r);
while(r){
if(r&1ll) re=(re+l)%m;
r>>=1ll;l=(l+l)%m;
}
return re;
}
struct ma{
ll a[][],n,m;
ma(){memset(a,,sizeof(a));n=m=;}
void clear(){memset(a,,sizeof(a));n=m=;}
const void operator =(const ma &b){
n=b.n;m=b.m;ll i,j;
for(i=;i<=n;i++) for(j=;j<=n;j++) a[i][j]=b.a[i][j];
}
}a,b;
ma mmul(ma x,ma y){
ma re;re.n=x.n;re.m=y.m;ll i,j,k;
for(i=;i<=x.n;i++){
for(j=;j<=y.m;j++){
for(k=;k<=x.m;k++){
re.a[i][j]+=mul(x.a[i][k],y.a[k][j]);
re.a[i][j]%=m;
}
}
}
return re;
}
ma ppow(ma x,ma y,ll t){
while(t){
if(t&1ll) x=mmul(x,y);
y=mmul(y,y);t>>=1ll;
}
return x;
}
int main(){
m=read();A=read();C=read();st=read();n=read();g=read();
a.n=;a.m=;b.n=b.m=;
a.a[][]=st;a.a[][]=;
b.a[][]=A;b.a[][]=C;b.a[][]=;
ma ans=ppow(a,b,n);
printf("%lld",ans.a[][]%g);
}

[luogu2044][NOI2012] 随机数生成器 [矩阵快速幂]的更多相关文章

  1. BZOJ 2875: [Noi2012]随机数生成器( 矩阵快速幂 )

    矩阵快速幂...+快速乘就OK了 ----------------------------------------------------------------------------------- ...

  2. [日常摸鱼]bzoj2875[NOI2012]随机数生成器-矩阵快速幂

    好裸的矩阵快速幂-然而我一开始居然构造不出矩阵- 平常两个的情况都是拿相邻两项放在矩阵里拿去递推的-然后我就一直构造不出来-其实把矩阵下面弄成1就好了啊orz #include<cstdio&g ...

  3. bzoj2875随机数生成器——矩阵快速幂

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2875 矩阵快速幂,把x和c分开求,最后加上即可: 为防止爆long long,要用快速乘. ...

  4. Bzoj 2875: [Noi2012]随机数生成器(矩阵乘法)

    2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2052 Solved: 1118 Description ...

  5. [NOI2012]随机数生成器 矩阵乘法

    Code: #include<cstdio> #include<algorithm> #include<iostream> #include<cstring& ...

  6. 矩阵(快速幂):COGS 963. [NOI2012] 随机数生成器

    963. [NOI2012] 随机数生成器 ★★   输入文件:randoma.in   输出文件:randoma.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] 栋 ...

  7. [NOI2012]随机数生成器【矩阵快速幂】

    NOI2012 随机数生成器 题目描述 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法 ...

  8. 【BZOJ2875】【NOI2012】随机数生成器(矩阵快速幂)

    [BZOJ2875]随机数生成器(矩阵快速幂) 题面 Description 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Me ...

  9. BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘

    题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...

随机推荐

  1. 简单的Maven+SpringMVC

    一.SpringMVC非注解编程 1:修改pom.xml文件(相当于非Maven项目的导入jar包) <!-- https://mvnrepository.com/artifact/org.sp ...

  2. Linux入门-第八周

    1.用shell脚本实现自动登录机器 #!/usr/bin/expectset ip 192.168.2.192set user rootset password rootspawn ssh $use ...

  3. 第六篇:python中numpy.zeros(np.zeros)的使用方法

    用法:zeros(shape, dtype=float, order='C') 返回:返回来一个给定形状和类型的用0填充的数组: 参数:shape:形状 dtype:数据类型,可选参数,默认numpy ...

  4. Node.js 特点

      1.单线程 在Java.PHP或者.net等服务器端语言中,会为每一个客户端连接创建一个新的线程.而每个线程需要耗费大约2MB内存.也就是说,理论上,一个8GB内存的服务器可以同时连接的最大用户数 ...

  5. java util - MD5/AES/RSA快速调用工具

    测试代码 package cn.java.security; import java.security.Key; import java.util.Base64; import org.junit.A ...

  6. 动态规划:HDU3496-Watch The Movie(二维费用的背包问题)

    Watch The Movie Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  7. proguaid 混淆代码

    注意:这里有一个坑.就是-ignorewarnings 他老是混淆不了,告诉你不行.其实加上这句话,就可以了. 下面贴一下代码: -injars c:/ceb_lib.jar -outjars c:/ ...

  8. Android百度地图开发 百度地图得到当前位置

    1.申请key 2.复制jar,以及.so .注意要Libs目录右键build path -> use as source folder(这是一个坑) 3. AndroidMainFast.xm ...

  9. Django基于Pycharm开发之四[关于静态文件的使用,配置以及源码分析](原创)

    对于django静态文件的使用,如果开发过netcore程序的开发人员,可能会比较容易理解django关于静态文件访问的设计原理,个人觉得,这是一个middlerware的设计,但是在django中我 ...

  10. asp.net中使用ffmpeg

    protected void Button1_Click(object sender, EventArgs e) { string FFmpegArguments = @" -i D:\离歌 ...