题目链接: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;
}

【总结】

活用快速幂的模板,毕竟这东西真的很神奇

[vijos1725&bzoj2875]随机数生成器<矩阵乘法&快速幂&快速乘>的更多相关文章

  1. BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘

    题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...

  2. bzoj2875随机数生成器——矩阵快速幂

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2875 矩阵快速幂,把x和c分开求,最后加上即可: 为防止爆long long,要用快速乘. ...

  3. Bzoj 2875: [Noi2012]随机数生成器(矩阵乘法)

    2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2052 Solved: 1118 Description ...

  4. [NOI2012]随机数生成器 矩阵乘法

    Code: #include<cstdio> #include<algorithm> #include<iostream> #include<cstring& ...

  5. BZOJ 2875: [Noi2012]随机数生成器( 矩阵快速幂 )

    矩阵快速幂...+快速乘就OK了 ----------------------------------------------------------------------------------- ...

  6. 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】

    目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...

  7. HDU 4549 矩阵快速幂+快速幂+欧拉函数

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  8. 取模性质,快速幂,快速乘,gcd和最小公倍数

    一.取模运算 取模(取余)运算法则: 1. (a+b)%p=(a%p+b%p)%p; 2.(a-b)%p=(a%p-b%p)%p; 3.(a*b)%p=(a%p * b%p)%p; 4.(a^b)%p ...

  9. [日常摸鱼]bzoj2875[NOI2012]随机数生成器-矩阵快速幂

    好裸的矩阵快速幂-然而我一开始居然构造不出矩阵- 平常两个的情况都是拿相邻两项放在矩阵里拿去递推的-然后我就一直构造不出来-其实把矩阵下面弄成1就好了啊orz #include<cstdio&g ...

随机推荐

  1. sql05

    1.Ado.net Ado.net是一组由微软提供的使用C#操作数据库的类库 2.连接 首先引入: using System.Data.SqlClient; 需要使用连接字符串进行连接 using S ...

  2. DOM3中的自定义事件

    DOM3级还定义了自定义事件,自定义事件不是由DOM原生触发的,它的目的是让开发人员创建自己的事件.要创建的自定义事件可以由createEvent("CustomEvent"); ...

  3. 使用Blazor Server 线路处理程序 (circuit handler)跟踪打开的SignalR连接

    Blazor服务器允许定义线路处理程序(circuit handler)代码,该处理程序(handler)允许在更改用户线路状态时运行此代码. 线路处理程序(circuit handler)是通过从C ...

  4. Ubuntu 16 编译装python2.7

    Ubuntu 16自带 python3 ,有很多库无法使用,决定装 python2.7 试了试,好像 apt-get 装不上. 使用源码,编译安装. wget https://www.python.o ...

  5. ubunto 免输入密码 登录 putty ssh-keygen

    交互式密码不安全,现在改用 ssh 证书方式,不用输入密码使用公钥证书登录. 方法1, 此方法,仅试用于,仅使用win putty 来连接方式使用,如果双方都是 linux 如 rsync 同步等时, ...

  6. 【03】openlayers 地图事件

    绑定事件:map.on(type, listener) 取消绑定:map.un(type, listener) type:事件类型 listener:执行得函数体 事件类型: //事件类型 let t ...

  7. 学习RF遇到的问题

    1.Windows安装pip命令安装RF报错: File "<stdin>", line 1 pip install robotframework 原因:pip命令不在 ...

  8. Django中ORM中的get与filter区别

    本文出自 “orangleliu笔记本” 博客,出处http://blog.csdn.net/orangleliu/article/details/38597593 Django的orm中get和fi ...

  9. DJango中开启事务的两种方式

    目录 Django中开启事务的两种方式 第一种 第二种 Django中开启事务的两种方式 第一种 from django.db import transaction with transaction. ...

  10. vux中表单验证,在提交时自动聚焦到未验证通过的那栏;及循环表单的验证

    首先vux中的表单验证在点击触发,失焦时才显示错误信息,如果不管它,它就没反应,这显然是不合理的:解决办法就是:在提交时做验证,不通过的话就使用.focus()及.blur()方法给它聚焦,失焦. i ...