http://www.lydsy.com/JudgeOnline/problem.php?id=2875 (题目链接)

题意

  求${X_{n}}$。

Solution

  矩乘板子,这里主要讲下会爆long long的整数相乘取模,我们用double可以做到${O(1)}$。

  求${(AB)~mod~C}$。求出${D=\lfloor\frac{AB}{C}\rfloor}$,我们用long double搞。那么最后的答案就是${AB-CD}$,我们直接long long搞,可以视作是在模${2^{64}}$的意义下运算。什么鬼嘛。。。

  可以long long搞的原因应该是这样的。 ${AB}$与${CD}$不同的位数不会超过long long范围,所以更高位都是相等的,我们就直接不管好了。

细节

  竟然推错矩阵了×_×

代码

// bzoj2875
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; LL a,m,n,g,c,x0;
LL f[3][3],tmp[3][3],t[3][3]; LL mul(LL a,LL b) {
LL ans=a*b-(LL)((long double)a*b/m+1e-6)*m; //一定要用long double
return ans<0 ? ans+m : ans; //可能减成负数
}
void power(LL b) {
while (b) {
if (b&1) {
for (int i=1;i<=2;i++)
for (int j=1;j<=2;j++) {
tmp[i][j]=0;
for (int k=1;k<=2;k++) tmp[i][j]=(tmp[i][j]+mul(f[i][k],t[k][j]))%m;
}
for (int i=1;i<=2;i++)
for (int j=1;j<=2;j++) f[i][j]=tmp[i][j];
}
b>>=1;
for (int i=1;i<=2;i++)
for (int j=1;j<=2;j++) {
tmp[i][j]=0;
for (int k=1;k<=2;k++) tmp[i][j]=(tmp[i][j]+mul(t[i][k],t[k][j]))%m;
}
for (int i=1;i<=2;i++)
for (int j=1;j<=2;j++) t[i][j]=tmp[i][j];
}
}
int main() {
scanf("%lld%lld%lld%lld%lld%lld",&m,&a,&c,&x0,&n,&g);
f[1][1]=x0;f[1][2]=1;
t[1][1]=a;t[2][1]=c;t[2][2]=1;
power(n);
printf("%lld",f[1][1]%g);
return 0;
}

  

【bzoj2875】 Noi2012—随机数生成器的更多相关文章

  1. BZOJ2875 [Noi2012]随机数生成器 【矩阵乘法 + 快速乘】

    题目 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Me thod)来生成一个随机数列,这种方法需要设置四个非负整数参数m,a, ...

  2. bzoj2875: [Noi2012]随机数生成器

    矩阵乘法. x[n] = {x[0],1} * ( {a,0} ^ n ) {b,1} 写成这样谁能看懂.... noi里的大水题.我居然 #include<cstdio> #includ ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. BZOJ2875 & 洛谷2044:[NOI2012]随机数生成器——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=2875 https://www.luogu.org/problemnew/show/P2044 栋栋 ...

随机推荐

  1. 【转】Google Chrome中顺时针/逆时针滚动圆的含义

    当浏览器处于以下状态时,看起来好像圆圈是逆时针滚动的: 解析主机名 连接服务器 等待响应(从服务器发送第一个字节之前?) 当浏览器处于以下状态时,圆圈似乎顺时针滚动: 加载页面或引用的资源 在标签页中 ...

  2. 在 R 中估计 GARCH 参数存在的问题(基于 rugarch 包)

    目录 在 R 中估计 GARCH 参数存在的问题(基于 rugarch 包) 导论 rugarch 简介 指定一个 \(\text{GARCH}(1, 1)\) 模型 模拟一个 GARCH 过程 拟合 ...

  3. Python3入门(九)——面向对象OOP高级编程

    一.使用__slots__限制属性绑定 动态绑定实例的方法: class Person(object): def run(self): print("奔跑吧!") p1 = Per ...

  4. 使用jdb调试apk

    jdb是一个支持java代码级调试的工具,它是由java jdk提供的,存在于xxx\Java\jdk1.6.0_21\bin之下 使用ddms调试时,主机会打开另外一个网络端口,在DDMS里查看,一 ...

  5. metasploit-smb扫描获取系统信息

    1.msfconsle 2.use auxiliary/scanner/smb/smb_version 3. msf auxiliary(smb_version) > set RHOSTS 17 ...

  6. MongoDB的账户与权限管理及在Python与Java中的登录

    本文主要介绍了MongoDB的账户新建,权限管理(简单的),以及在Python,Java和默认客户端中的登陆. 默认的MongoDB是没有账户权限管理的,也就是说,不需要密码即可登陆,即可拥有读写的权 ...

  7. 杂谈---LZ的编程之路以及十点建议

    LZ本人是09年毕业的,在某二流本科院校学的非计算机专业,在兴趣的驱使之下,最终毅然决然的走上了编程这一条“不归路”. 说起LZ的经历虽不算是跌宕起伏,但也真正算是人生无常. 当初09年7月回到家里, ...

  8. Postman安装与入门使用

    Postman官方下载地址:https://www.getpostman.com/apps Postman 是一个很强大的 API调试.Http请求的工具.我们可以用来很方便的模拟get或者post或 ...

  9. Win环境 Android Studio使用Git 教程 ( 生成SSH key )

    Github和码云都提供SSH协议,即用户可以用公钥认证方式连接到码云的SSH服务器.这就需要生成并部署SSH Key.下面就是我生成SSH Key的步骤,希望有所帮助: Git生成SSH key 在 ...

  10. C# 导入(读取) WPS ET文件

    本文章介绍基于VS2010 Winform 的WPS2016二次开发 ET数据读取程序 本程序支持多个Sheet页面 前提:引用WPS安装目录下的etapi.dll private void butt ...