[vijos1725&bzoj2875]随机数生成器<矩阵乘法&快速幂&快速乘>
2024-08-26 23:22:26
题目链接:https://vijos.org/p/1725
http://www.lydsy.com/JudgeOnline/problem.php?id=2875
这题是前几年的noi的题,时间比较久远了所以就不是那么的难了
这是一个非常裸的矩阵乘法,一般矩阵乘法就是矩阵+快速幂
只是这道题在矩阵乘法的时候单纯的乘法会溢出,所以还要用到快速乘法
网上也有说用long double黑科技的,虽然我不是很懂那个东东
构造矩阵
单位矩阵a,c
0,1
答案矩阵 Xi-1
1
我的这个矩阵构造可能和一般的不同,主要是我受斐波拉契的毒害太深了QAQ
这题我一开始只是用的int,只过了一半,longlong后过了17组,最后三组加上快速乘优化才成功通过
然后如果是在vijos提交要注意一点就是在vijos上输出longlong型要用I64d来输出
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<queue>
#define ll long long
using namespace std; ll n,m,a,c,g,x0;
ll ans[][],b[][]; void read(ll & xx){
xx=;ll ff=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')ff=-;ch=getchar();}
while(ch>=''&&ch<=''){xx=xx*+ch-'';ch=getchar();}
xx*=ff;
} ll sum(ll x,ll y){
ll cnt=;
while(y){
if(y&){
cnt=(cnt+x)%m;
}y>>=;x=(x+x)%m;
}return cnt;
} void add(){
ll z[][];memset(z,,sizeof(z));
for(int i=;i<=;i++){
for(int j=;j<=;j++){
for(int k=;k<=;k++){
z[i][j]=(z[i][j]%m+sum(b[k][j],b[i][k])%m)%m;
}
}
}
for(int i=;i<=;i++)
for(int j=;j<=;j++)
b[i][j]=z[i][j]%m;
} void mul(ll y){
while(y){
if(y&){
ll z[][];z[][]=z[][]=;
for(int i=;i<=;i++){
for(int j=;j<=;j++){
for(int k=;k<=;k++){
z[i][j]=(z[i][j]%m+sum(ans[k][j],b[i][k])%m)%m;
}
}
}
ans[][]=z[][]%m;
}
y>>=;
add();
}
} int main(){
read(m),read(a),read(c),read(x0),read(n),read(g);
ans[][]=x0%m;ans[][]=;
b[][]=a%m;b[][]=c%m;b[][]=;
mul(n);
//printf("%lld",ans[1][1]%g);
cout<<ans[][]%g;
}
【总结】
活用快速幂的模板,毕竟这东西真的很神奇
最新文章
- Linux监控工具介绍系列&mdash;&mdash;free
- 用SignalR实现实时查看WebAPI请求日志
- K-Means 聚类算法原理分析与代码实现
- A/B测试
- [转】HTTP请求流程(二)----Telnet模拟HTTP请求
- jquery保存用户名和密码到cookie里面
- 1306.Sequence Median(堆排序)
- POJ2586 Y2K Accounting Bug(贪心)
- PHP获取当前类名、函数名、方法名
- 关于jQuery中的trigger和triggerHandler方法的使用
- 前端笔记之移动端&;响应式(中)视口&;百分比布局&;弹性盒模型&;rem&;fillpage
- flask轻量级框架入门
- 用Vue2仿京东省市区三级联动效果
- 基于IPv6的数据包抓包分析(GNS3)
- Hadoop问题:Input path does not exist: hdfs://Master:9000/user/hadoop/input
- 1. eclipse异常问题解决办法
- SQL server约束
- Citrix Merchandising Server 配置
- ML—机器学习常用包(持续更新….)
- 手机端可以和PC端同时在线-java QRCode 实现网站扫码登录(即支持同帐号多设备同时登录)
热门文章
- 重置gitlab管理员密码
- The superclass ";javax.servlet.http.HttpServlet"; was not found on the Java Build Path index.jsp页面出现错误的解决方法
- 原型模式故事链(3)--JS的数据类型、以及区别、区分、转化
- 峰哥说技术:08-Spring Boot整合FreeMarker视图
- 前端---css3优化
- Python中使用os模块执行远程命令
- juery 弹出框
- this.current = params.page || 1 (前提是params对象一定要存在)
- Mybatis---在控制台打印sql语句
- postman集合测试执行