【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 ...
随机推荐
- 向MyEclipse添加Oracle数据库
向MyEclipse添加Oracle数据库 1.点击下面圈起来的位置,打开MyEclipse database Explorer视图. 2.在如图空白处右击,选择new进入New Database C ...
- php 学习笔记
//本文转自:http://www.cnblogs.com/ronghua/p/6002995.html //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. ...
- Delphi版本号对照(转)
Delphi版本号对照 VER10 :Turbo Pascal 1VER20 : Turbo Pascal 2VER30 : Turbo Pascal 3VER40 : Turbo Pasca ...
- SQL表连接查询
SQL表连接查询(inner join.full join.left join.right join) 表的数据有: 一.内连接-inner jion : 最常见的连接查询可能是这样,查出学生的名字和 ...
- spark RDD的元素顺序(ordering)测试
通过实验发现: foreach()遍历的顺序是乱的 但: collect()取到的结果是依照原顺序的 take()取到的结果是依照原顺序的 为什么呢???? 另外,可以发现: take()取到了指定数 ...
- [转]C#如何在ListView失去焦点的情况下仍然保持Item高亮
private void listView1_SelectedIndexChanged(object sender, EventArgs e) { foreach(ListViewItem itm i ...
- ORACLE字符串分组聚合函数(字符串连接聚合函数)
ORACLE字符串连接分组串聚函数 wmsys.wm_concat SQL代码: select grp, wmsys.wm_concat(str) grp, 'a1' str from dual un ...
- JSP之session
index.jsp: <form id="form1" name="form1" method="post" action=" ...
- ADO.NET笔记(一)XML导入导出和数据库
数据导出成XML文件 #region 数据导出成XML文件 string sql = "select Id, CallerNumber, TelNum, StartDateTime, End ...
- C# 保存PictureBox中的图片到数据库,并从数据库读取图片显示到PictrueBox,解决报错 “无效参数”
下面是两段关键代码: /// <summary> /// 将一张图片转换为字节 /// </summary> /// <param name="img" ...