今天,[kzj](https://www.cnblogs.com/kzj-pwq/)大佬教了我矩阵加速。

让我以这篇随笔表示感谢吧!

这是我刷的一道NOI2012 随机数据生成器

就是普通的矩阵加速,只是要注意的是:

直接用乘法会爆long long,可以参考一下 黑科技 慢速乘

可以把乘法转换成加法,很好取模。

贴上丑陋的代码吧~ 忽略函数名

#include <bits/stdc++.h>
using namespace std;
typedef long long ull; const ull A=0;
ull m,a,c,x0,n,g;
ull f[3],t[3][3]={
{0,0,0},
{0,A,0},
{0,1,1}
}; ull suan(ull x,ull y)
{
ull ans=0;
while (y) {
if (y&1)
ans=((ans%m)+(x%m))%m;
x=((x%m)+(x%m))%m;
y>>=1;
}
return ans;
} ull fuyan()
{
ull d[3];
memcpy(d,f,sizeof(d));
memset(f,0,sizeof(f));
for (int i=1;i<=2;++i)
for (int j=1;j<=2;++j)
f[i]=(f[i]%m+suan(d[j]%m,t[j][i]%m))%m;
} ull yuzhouzhou()
{
ull d[3][3];
memcpy(d,t,sizeof(d));
memset(t,0,sizeof(t));
for (int i=1;i<=2;++i)
for (int j=1;j<=2;++j)
for (int k=1;k<=2;++k)
t[i][j]=(t[i][j]%m+suan(d[i][k]%m,d[k][j]%m))%m;
} ull work(ull p)
{
while (p) {
if (p&1)
fuyan();
yuzhouzhou();
p>>=1;
}
return f[1];
} int main()
{
cin>>m>>a>>c>>x0>>n>>g;
t[1][1]=a%m;
f[1]=x0;f[2]=c;
cout<<work(n)%g<<"\n";
return 0;
}

矩阵乘法 NOI2012的一道题的更多相关文章

  1. poj3233 题解 矩阵乘法 矩阵快速幂

    题意:求S = A + A2 + A3 + … + Ak.(mod m) 这道题很明显可以用矩阵乘法,但是这道题的矩阵是分块矩阵, 分块矩阵概念如下:当一个矩阵A中的单位元素aij不是一个数值而是一个 ...

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

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

  3. BZOJ2875 [Noi2012]随机数生成器 【矩阵乘法 + 快速乘】

    题目 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Me thod)来生成一个随机数列,这种方法需要设置四个非负整数参数m,a, ...

  4. 【Codeforces718C】Sasha and Array 线段树 + 矩阵乘法

    C. Sasha and Array time limit per test:5 seconds memory limit per test:256 megabytes input:standard ...

  5. 学习心得:《十个利用矩阵乘法解决的经典题目》from Matrix67

    本文来自:http://www.matrix67.com/blog/archives/tag/poj大牛的博文学习学习 节选如下部分:矩阵乘法的两个重要性质:一,矩阵乘法不满足交换律:二,矩阵乘法满足 ...

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

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

  7. 蓝桥杯 BASIC_17 矩阵乘法 (矩阵快速幂)

    问题描述 给定一个N阶矩阵A,输出A的M次幂(M是非负整数) 例如: A = 1 2 3 4 A的2次幂 7 10 15 22 输入格式 第一行是一个正整数N.M(1<=N<=30, 0& ...

  8. bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 613  Solved: 256[Submit][Status] ...

  9. [BZOJ 1875] [SDOI 2009] HH去散步【矩阵乘法】

    题目链接:BZOJ - 1875 题目分析: 这道题如果去掉“不会立刻沿着刚刚走来的路走回”的限制,直接用邻接矩阵跑矩阵乘法就可以了.然而现在加了这个限制,建图的方式就要做一些改变.如果我们把每一条边 ...

随机推荐

  1. [PWA] Cache Third Party Resources from a CDN in a React PWA

    Our service worker caches our static assets - but only those assets that are included in our React A ...

  2. NGINX 缓存使用指南

    NGINX 缓存使用指南 [proxy_cache] Nginx 一个web缓存坐落于客户端和“原始服务器(origin server)”中间,它保留了所有可见内容的拷贝.如果一个客户端请求的内容在缓 ...

  3. C++Singleton的DCLP(双重锁)实现以及性能测评

      本文系原创,转载请注明:http://www.cnblogs.com/inevermore/p/4014577.html   根据维基百科,对单例模式的描述是: 确保一个类只有一个实例,并提供对该 ...

  4. 标准库Stack的一种实现

    本文实现了STL中stack的大部分功能,同时添加了一些功能. 注意以下几点: 1.Stack是一种适配器,底层以vector.list.deque等实现 2.Stack不含有迭代器 在本例中,我添加 ...

  5. 【BIEE】03_BIEE数据源配置

    声明:此时说的是Oracle数据源配置 BIEE数据源配置有两种方法 ①直接使用字符串连接 ②将tnsnames.ora文件覆盖到obiee目录下 直接使用字符串 直接使用字符串连接很简单 首先打开资 ...

  6. RabbitMQ功能测试+性能测试简单方法

    一.如何测试RabbitMQ的功能 1.联系开发找到队列的名称:登录MQ后台管理地址;点击Queues页,输入队列名搜索出目标队列(支持模糊查询) 2.准备测试数据 (1)已知json格式时,根据不同 ...

  7. Android基础之使用Fragment控制切换多个页面

    Android官方已经提供了Fragment的各种使用的Demo例子,在我们SDK下面的API Demo里面就包含了Fragment的各种使用例子,需要看Demo的朋友,直接看API Demo那个程序 ...

  8. MySQL优化时可以设置的几个参数

    back_log:back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中.也就是说,如果MySql的连接数据达到max_connections时,新来的请求将会被 ...

  9. iOS tableView嵌套部分WebView效果实现

    对于一些资讯类的app,比如网易新闻,今日头条这样的,他们的文章详情页大部分基本都是tableView中嵌套webView来实现的效果,其中顶部标题,关注按钮等这些可能是原生的,内容部分是webVie ...

  10. Python环境搭建及IDE选择(转载)

    Python环境搭建及IDE选择 人工智能社区 http://studyai.com 系统:Windows 7 版本:Python 2.7 一.安装Python 在开始编程之前,我们首先需要搭建Pyt ...