链接

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4132

题解

真是神了
这题的转移矩阵写出来之后,发现它是循环矩阵
就是每一行都是上一行向右移动一个单位,末尾元素补到开头
这样的两个矩阵相乘,得到的还是循环矩阵
因此我可以只用其中一个矩阵的一行做乘法,算出答案中矩阵的第一行,然后直接根据循环的性质推出剩下的元素,这样矩阵乘法的复杂度可以下降到O(n2)O(n^2)O(n2)

代码

//矩阵加速递推
#include <bits/stdc++.h>
#define cl(x) memset(x,0,sizeof(x))
#define ll long long
using namespace std;
ll N, mod, d, k;
struct Matrix
{ll n, m, a[510][510];ll* operator[](ll x){return a[x];}Matrix(ll x, ll y){n=x, m=y;cl(a);}
};
Matrix operator*(Matrix a, Matrix b)
{Matrix t(a.n,b.m);ll i, j, k;for(i=1,j=1;i<=t.n;i++)for(k=1;k<=a.m;k++)t[i][j]=(t[i][j]+a[i][k]*b[k][j])%mod;for(j=2;j<=t.m;j++){t[1][j]=t[t.n][j-1];for(i=2;i<=t.n;i++)t[i][j]=t[i-1][j-1];}return t;
}
Matrix fastpow(Matrix a, ll b)
{ll i, j;Matrix t(a.n,a.m), ans(a.n,a.m);for(i=1;i<=a.n;i++)for(j=1;j<=a.m;j++)t[i][j]=a[i][j];for(i=1;i<=a.n;i++)ans[i][i]=1;for(;b;b>>=1,t=t*t)if(b&1)ans=ans*t;return ans;
}
ll read(ll x=0)
{ll c, f=1;for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-1;for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-48;return f*x;
}
int main()
{while(~scanf("%lld%lld%lld%lld",&N,&mod,&d,&k)){Matrix f(N,1), trans(N,N);ll i, j;for(i=1;i<=N;i++)for(j=1;j<=N;j++)if(min(abs(i-j),N-abs(i-j))<=d)trans[i][j]=1;for(i=1;i<=N;i++)f[i][1]=read();f=fastpow(trans,k)*f;for(i=1;i<N;i++)printf("%lld ",f[i][1]);printf("%lld\n",f[N][1]);}return 0;
}

1386 - Cellular Automaton相关推荐

  1. UVA1386 【Cellular Automaton】题解

    题面:UVA1386 Cellular Automaton 矩阵乘法+快速幂解法: 这是一个比较裸的有点复杂需要优化的矩乘快速幂,所以推荐大家先做一下下列洛谷题目练练手: (会了,差不多就是多倍经验题 ...

  2. poj 3150 Cellular Automaton(迷糊,但原理是用的快速幂)

    http://blog.csdn.net/guard_mine/article/details/44351103 http://www.cnblogs.com/xin-hua/archive/2013 ...

  3. 2012 Tokyo Regional C. One-Dimensional Cellular Automaton 矩阵快速幂

    题意:一个二元函数S(i, t)满足下列方程: 给出,其中N为i的个数,需要求出的值 思路:矩阵快速幂,递推式如下: #include<bits/stdc++.h> using names ...

  4. POJ3150—Cellular Automaton(循环矩阵)

    题目链接:http://poj.org/problem?id=3150 题目意思:有n个数围成一个环,现在有一种变换,将所有距离第i(1<=i<=n)个数小于等于d的数加起来,对m取余,现 ...

  5. kuangbin带你飞专题合集

    题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...

  6. 算法学习经典例题整理

    陆续会对本篇博客进行更新! 搜索:https://vjudge.net/contest/292597 区间DP:https://vjudge.net/contest/293892 树状背包:https ...

  7. kuangbin带你飞 专题1-23 题单

    kuangbin大神,对于打过ACM比赛的ACMer,无人不知无人不晓. 在此,附上vjudge平台上一位大神整理的[kuangbin带你飞]专题目录链接. [kuangbin带你飞专题目录1-23] ...

  8. 老鱼的-kuangbin专题题解

    kuangbin专题问题一览 专题一 简单搜索 POJ 1321 棋盘问题 POJ 2251 Dungeon Master POJ 3278 Catch That Cow POJ 3279 Flipt ...

  9. 杭电oj题目题型分类(转)

    1001 整数求和 水题 1002 C语言实验题--两个数比较 水题 1003 1.2.3.4.5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 Hero In Maze 广度搜索 ...

  10. HDOJ题目分类大全

    版权声明:本文为博主原创文章,欢迎转载,转载请注明本文链接! https://blog.csdn.net/qq_38238041/article/details/78178043 杭电里面有很多题目, ...

最新文章

  1. 微软宣布公开预览其内容分发网络
  2. 熟悉的亲切-老外婆教做的豌豆蔬菜汤
  3. 织梦CMS调用指定顶级栏目名称的方法
  4. 给SAP云平台的global账号添加Leonardo机器学习服务
  5. Linux:建立内核代码树
  6. 人工智能是利用电子计算机模拟人类智力,第一章 计算机系统.ppt
  7. Linux | 进程概念、进程状态(僵尸进程、孤儿进程、守护进程)、进程地址空间
  8. Jmeter - 服务器性能检测
  9. python selenium 环境_配置Python Selenium环境
  10. 【Matlab学习笔记】【编程实例】一(将两幅图像调整为相同的尺寸大小)
  11. 基于thinkphp的出租屋管理系统升级版
  12. 用八类网线钳和剥线刀做网线水晶头
  13. 完美国际单机版 服务器修改,绝心完美136开服教程EL修改
  14. 手机上将mp4转换成amv_如何在Linux上将所有文本从大写转换为小写?
  15. 用手机玩转GIS!这些你常用的GIS软件竟然都有手机版
  16. java实现qq页面登陆界面
  17. 爬虫 - 提高爬虫效率的方法
  18. 对话华为鸿蒙掌舵人王成录:真正的第一,是掌握在自己手里的第一
  19. vue数据传递--父传子-方法传递
  20. unity-shader-ShaderGraph可视化shader

热门文章

  1. 《零秒工作》的一些总结
  2. sql数据库可以创建同义词_如何使用同义词简化SQL Server数据库对象的使用
  3. 计算机硬盘发展现状,固态硬盘的发展现状
  4. OC中浮点数转整数的进一法和去尾法
  5. 【数字图像处理matlab】RGB转HIS,HIS转RGB
  6. MacBook入门之——添加打印机
  7. MATLAB一元微积分实验
  8. 【论文解读】 FPGA实现卷积神经网络CNN(二): Optimizing FPGA-based Accelerator Design for DCNN
  9. Wireshark流量分析
  10. u盘文件或目录损坏且无法读取