【BZOJ 2875】 [Noi2012]随机数生成器
Description
Xn+1 = ( aXn + c ) mod m,求Xn
m, a, c, x0, n, g<=10^18
Input
包含6个用空格分割的m,a,c,X0,n和g,其中a,c,X0是非负整数,m,n,g是正整数。
Output
输出一个数,即Xn mod g
Sample Input
Sample Output
#include<cstdio>
#define ll long long
ll z[][],a[][];
ll m,b,c,x0,n,p;
ll plus(ll x,ll y,ll p){
ll s=;
while (x>=){
if (x&==) s=(s+y)%p;
x=x>>;
y=(y+y)%p;
}
return s;
} void mult1(ll a[][],ll b[][]){
ll c[][];
for (int i=;i<;i++) for (int j=;j<;j++) c[i][j]=;
for (int i=;i<;i++)
for (int j=;j<;j++)
for (int k=;k<;k++)
c[i][j]=(c[i][j]+plus(a[i][k],b[k][j],p))%p;
for (int i=;i<;i++) for (int j=;j<;j++) a[i][j]=c[i][j];
} void mult2(ll a[][],ll b[][]){
ll c[][];
for (int i=;i<;i++) for (int j=;j<;j++) c[i][j]=;
for (int i=;i<;i++)
for (int j=;j<;j++)
for (int k=;k<;k++)
c[i][j]=(c[i][j]+plus(a[i][k],b[k][j],p))%p;
for (int i=;i<;i++) for (int j=;j<;j++) a[i][j]=c[i][j];
} void pow(ll z[][],ll n){
ll ans[][];
for (int i=;i<;i++) for (int j=;j<;j++) ans[i][j]=;
ans[][]=; ans[][]=;
while (n>){
if (n%==) mult1(ans,z);
n=n>>;
mult1(z,z);
}
for (int i=;i<;i++) for (int j=;j<;j++) z[i][j]=ans[i][j];
} int main(){
scanf("%lld%lld%lld%lld%lld%lld",&p,&b,&c,&x0,&n,&m);
z[][]=b;z[][]=;z[][]=;
a[][]=x0;a[][]=c;
pow(z,n);
mult2(a,z);
printf("%lld",a[][]%m);
}
【BZOJ 2875】 [Noi2012]随机数生成器的更多相关文章
- BZOJ 2875: [Noi2012]随机数生成器( 矩阵快速幂 )
矩阵快速幂...+快速乘就OK了 ----------------------------------------------------------------------------------- ...
- Bzoj 2875: [Noi2012]随机数生成器(矩阵乘法)
2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2052 Solved: 1118 Description ...
- bzoj 2875: [Noi2012]随机数生成器
#include<cstdio> #include<iostream> #include<cstring> #define ll long long using n ...
- 【BZOJ】2875: [Noi2012]随机数生成器(矩阵乘法+快速乘)
http://www.lydsy.com/JudgeOnline/problem.php?id=2875 矩阵的话很容易看出来.....我就不写了.太水了. 然后乘法longlong会溢出...那么我 ...
- 2875: [Noi2012]随机数生成器 - BZOJ
DescriptionInput 包含6个用空格分割的m,a,c,X0,n和g,其中a,c,X0是非负整数,m,n,g是正整数. Output 输出一个数,即Xn mod gSample Input ...
- 矩阵(快速幂):COGS 963. [NOI2012] 随机数生成器
963. [NOI2012] 随机数生成器 ★★ 输入文件:randoma.in 输出文件:randoma.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 栋 ...
- [NOI2012]随机数生成器【矩阵快速幂】
NOI2012 随机数生成器 题目描述 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法 ...
- BZOJ2875 & 洛谷2044:[NOI2012]随机数生成器——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=2875 https://www.luogu.org/problemnew/show/P2044 栋栋 ...
- 【bzoj2875】 Noi2012—随机数生成器
http://www.lydsy.com/JudgeOnline/problem.php?id=2875 (题目链接) 题意 求${X_{n}}$. Solution 矩乘板子,这里主要讲下会爆lon ...
随机推荐
- LeetCode 283
Move Zeros Given an array nums, write a function to move all 0's to the end of it while maintaining ...
- [改善Java代码]不同的场景使用不同的泛型通配符
Java泛型支持通配符(Wildcard),可以单独使用一个"?"表示任意类,也可以使用extends关键字标识某一类(接口)的子类型,还可以使用super关键字标识某一类(接口) ...
- [设计模式]<<设计模式之禅>>关于依赖倒置原则
依赖倒置原则(Dependence Inversion Principle,DIP)这个名字看着有点别扭,“依赖”还“倒置”,这到底是什么意思?依赖倒置原则的原始定义是 High level modu ...
- ‘初始化锁相环INIT_PLL()’
在XS128的SCI学习的过程中,INIT_PLL()显得很重要,初始化锁相环几乎在每个程序中都有,今天看的程序-初始化锁相环的相关代码如下: /*************************** ...
- HDOJ2003求绝对值
求绝对值 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- SQLSERVER2012数据库还原
(1)还原已存在数据库 还原时提示失败,因为数据库正在使用,无法获得独占访问权.解决办法,先分离已存在的数据库,再执行还原操作. 确定后居然成功了,因为我是先使用(2)还原数据库后直接尝试(1)方法还 ...
- js画了一个椭圆
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- PHP标签的格式
PHP标签的格式: 1.xml格式(推荐的,标准的标记) <?php php代码?> 示例: 2.短格式 <? php代码 ?> 此种格式需要在php.ini中配置 示例 ...
- vi 技巧
:%s/^/\// 行首加 / :%s/$/\// 行尾加/ :%s/^\///g 行首减 / :%s/\/$//g 行尾减/ :%s/^\s*//g 行首减 空格
- 第六章 Qt布局管理器Layout
第六章 Qt布局管理器Layout 大家有没有发现一个现象,我们放置一个组件,给组件最原始的定位是给出这个控件的坐标和宽高值,这样Qt就知道这个组件的位置.当用户改变窗口的大小,组件还静静地呆在原来的 ...