【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 ...
随机推荐
- [转]IIS7.5 添加expires头 提高性能
本文转自:http://niutuku.com/tech/www/271454.shtml 对于页面中不经常变化的静态内容通过指定expires头,来进行浏览器端的缓存,减少每次访问时的请求. 原理: ...
- CF Pangram
Pangram time limit per test 2 seconds memory limit per test 256 megabytes input standard input outpu ...
- [改善Java代码]构造代码块会想你所想
建议37: 构造代码块会想你所想 镜像博文:http://www.cnblogs.com/DreamDrive/p/5413408.html http://www.cnblogs.com/DreamD ...
- [ImportNew]Java中的Timer类和TimerTask类
http://www.importnew.com/9978.html java.util.Timer是一个实用工具类,该类用来调度一个线程,使它可以在将来某一时刻执行. Java的Timer类可以调度 ...
- MySQL DBA 刚入职时如何快速拥抱新的环境
方法何其多.这里介绍的是懒人做法.也就是.借助工具 但是.生产环境是不能随便安装程序的.肿么办? 没关系.我们伟大的percona 已经为我们考虑周详鸟 这里.我们要借助三个工具: ...
- 一步步搭建自己的轻量级MVCphp框架-(一)什么是PHP框架以及MVC设计模式
PHP框架 php框架对很多新手而言可能会觉得很难攀越,其实不然 ,只要知道一个框架的流程,明白原理了,基本类似框架都可以看懂,php框架真正的发展要从php5开始了,其实php4时代就有一些框架,但 ...
- C#编写windows服务程序
Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...
- Ajax-jQuery实现
load方法: 对上一篇中的javascript原生实现(数据格式为html),用jqury的post方法进行改造: 下面这句中“h2 a”,实现了对返回内容的选择: $.get()\$.post ...
- python学习day4--python基础--元组,字符串
1.元组 #只读列表,元组,当希望生成后不被修改则用元组 r=(1,2,3,4,5) 元组 2.字符串,python字符串操作非常丰富,编程时可先查询python本身是否已设计了相关函数 #移除空白 ...
- 更换用installshield打包生成exe文件的图标【转】
最近在研究用installshield2010为自己做的产品打包,自己在网上找写资料,胡乱折腾,最后弄成了一个exe安装包,想要修改exe文件的图标,发现Basic MSI project 无法用in ...