P2044 [NOI2012]随机数生成器
正常的矩乘题。
但是,计算过程中会爆long long。
所以,我们要用快速(龟速)乘来解决。
快速乘,也就是把快速幂稍作修改。乘法被分成若干个加法,以时间为代价解决精度问题。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll; ll n,m,_a,c,g;
inline ll fastmul(ll x,ll y){ //快速乘
ll ans=;
for(;y;y>>=){
if(y&) ans=(ans+x)%m;
x=(x<<)%m;
}
return ans%m;
}
struct matrix{
ll a[][];
matrix(){memset(a,,sizeof(a));}
matrix operator * (matrix &tmp){
matrix c;
for(int i=;i<=;++i)
for(int j=;j<=;++j)
for(int k=;k<=;++k)
c.a[i][j]=(c.a[i][j]+fastmul(a[i][k],tmp.a[k][j]))%m;
return c;
}
matrix ksm(matrix x,ll y){
matrix ans;
ans.a[][]=ans.a[][]=;
for(;y;y>>=){
if(y&) ans=ans*x;
x=x*x;
}
return ans;
}
}p,st; int main()
{
scanf("%lld%lld%lld%lld%lld%lld",&m,&_a,&c,&st.a[][],&n,&g);
p.a[][]=_a; p.a[][]=p.a[][]=; //构造初始矩阵
st.a[][]=c;
p=p.ksm(p,n);
st=st*p;
printf("%lld",st.a[][]%g);
return ;
}
P2044 [NOI2012]随机数生成器的更多相关文章
- [洛谷P2044][NOI2012]随机数生成器
题目大意:给你$m,a,c,X_0,n,g$,求$X_{n+1}=(a\cdot X_n+c) \bmod{m}$,最后输出对$g$取模 题解:矩阵快速幂+龟速乘,这里用了$long\;double$ ...
- 洛谷 P2044 [NOI2012]随机数生成器
题意简述 读入X[0], m, a, c, n和g $ X[n+1]=(a*X[n]+c)\mod m $ 求X数列的第n项对g取余的值. 题解思路 矩阵加速 设\[ F=\begin{bmatrix ...
- 矩阵(快速幂):COGS 963. [NOI2012] 随机数生成器
963. [NOI2012] 随机数生成器 ★★ 输入文件:randoma.in 输出文件:randoma.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 栋 ...
- BZOJ 2875: [Noi2012]随机数生成器( 矩阵快速幂 )
矩阵快速幂...+快速乘就OK了 ----------------------------------------------------------------------------------- ...
- Bzoj 2875: [Noi2012]随机数生成器(矩阵乘法)
2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2052 Solved: 1118 Description ...
- [NOI2012]随机数生成器【矩阵快速幂】
NOI2012 随机数生成器 题目描述 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法 ...
- BZOJ2875 & 洛谷2044:[NOI2012]随机数生成器——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=2875 https://www.luogu.org/problemnew/show/P2044 栋栋 ...
- LG2044 [NOI2012]随机数生成器
题意 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法需要设置四个非负整数参数m,a,c ...
- BZOJ2875 [Noi2012]随机数生成器 【矩阵乘法 + 快速乘】
题目 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Me thod)来生成一个随机数列,这种方法需要设置四个非负整数参数m,a, ...
随机推荐
- 使用Pyinstaller打包python py文件注意事项
首先需要将cmd或者PowerShell目录cd 跳转到py脚本所在目录,然后直接执行 Pyinstaller -F即可完成程序的打包,其中我们关心它有哪些常见参数: 输入参数的含义 -F 表示生成单 ...
- git push 报错:missing Change-Id in commit message footer
使用gerrit后,提交代码会出现如下截图问题: 临时解决: step1:把上面红色的那条gitidir复制下来执行下: step2:执行下面的命令会添加change_id git commit -- ...
- jira使用问题汇总
本博客主要是解决jira使用中遇到的问题的汇总,会持续更新~~~ 1.修改用户的用户名: 用户管理--->用户 找到对应的用户,选择”编辑“,修改用户名就可以了,如下: 2.清理离职用户: (1 ...
- 20165321实验一 Java开发环境的熟悉
一.idea调试: 二.实验内容: 实现学生成绩管理功能(增删改,排序,查找),并进行测试(正常情况,异常情况,边界情况). 运行截图: 代码: public class Student { Stri ...
- 测试一体机ASM failgroup的相关问题处理
环境:3台虚拟机 RHEL 7.3 + Oracle RAC 11.2.0.4 问题现象:RAC运行正常,ASM磁盘组Normal冗余,有failgroup整体故障,有failgroup配置错误. 温 ...
- webpack打包二进制文件报错
错误示例,如下图所示: 修改webpack的module部分的rules,在其中添加一下代码: { test: /\.woff[0-9]{0,}$/, loader: "url-loader ...
- vmvare 将主机的文件复制到虚拟机系统中 安装WMware tools
在虚拟机里的ubuntu这里找到VMware tools包
- C#项目中关于多个程序集下App.config文件的问题
在项目中我们会经常用到App.config文件,有的是自动生成的,比如引用webservice.wcf服务时生成:也有手动建立的配置文件直接默认名就为app.config.这些配置有的保存当前程序集用 ...
- 1.sklearn库的安装
sklearn库 sklearn是scikit-learn的简称,是一个基于Python的第三方模块.sklearn库集成了一些常用的机器学习方法,在进行机器学习任务时,并不需要实现算法,只需要简单的 ...
- Java基础(basis)-----抽象类和接口详解
1.抽象类 1.1 abstract修饰类:抽象类 不可被实例化 抽象类有构造器 (凡是类都有构造器) 抽象方法所在的类,一定是抽象类 抽象类中可以没有抽象方法 1.2 abstract修饰方法:抽象 ...