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. mysql图形化界面MySQL_Workbench

    1,下载最新版本的MySQL Workbench,下载地址: http://www.mysql.com/downloads/workbench/   2,安装Workbench的依赖组件两个 http ...

  2. 大数据入门第十二天——flume入门

    一.概述 1.什么是flume 官网的介绍:http://flume.apache.org/ Flume is a distributed, reliable, and available servi ...

  3. 20155210 Exp9 Web安全基础实践

    Exp9 Web安全基础实践 实验过程 开启webgoat 输入java -jar webgoat-container-7.1-exec.jar,来运行webgoat 在浏览器输入localhost: ...

  4. 20155236范晨歌_Web安全基础实践

    20155236范晨歌_Web安全基础实践 目录 实践目标 WebGoat BurpSuite Injection Flaws Cross-Site Scripting (XSS) 总结 实践目标 ( ...

  5. 记一次SpringMVC碰到的坑

            在SpringMVC中,我们Controller中接收比如表单的参数,只要保证方法的形参的名字和表单中input元素的的name一样就可以接收到参数.         但是,我开发的一 ...

  6. 【LG4248】[AHOI2013]差异

    [LG4248][AHOI2013]差异 题面 洛谷 题解 后缀数组版做法戳我 我们将原串\(reverse\),根据后缀自动机的性质,两个后缀的\(lcp\)一定是我们在反串后两个前缀的\(lca\ ...

  7. libgdx学习记录24——九宫格NinePatch

    NinePatch用于图片纹理拉伸显示.当图片拉伸时,4个角不会拉伸,而只有中间的部分会拉伸,适合做圆角矩形类的Button. 简单示例: package com.fxb.newtest; impor ...

  8. linux下的yum命令详细介绍

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  9. HTML快速入门(一)

    一.HTML 是什么? HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (markup language) 标记 ...

  10. BaseProxy:异步http/https中间人

    BaseProxy 异步http/https代理,可拦截并修改报文,可以作为中间人工具.仅支持py3.5+.项目地址:BaseProxy. 意义 BaseProxy项目的本意是为了使HTTP/HTTP ...