POJ3150:Cellular Automaton】的更多相关文章

题意看不懂加题目想不通,很菜. n<=500个数围城环,每次操作对每个数Ai把与i在环上相距不超过d<n/2(包括Ai)的数加起来取模m<=1e6,求K<=1e7次操作后的环. 存在递推关系,构造矩阵吧!比如样例一很丑. 于是矩阵快速幂,n*n*n*logK,很慢. 这个矩阵比较奇怪,每一行都是上一行右移一位,而且每一行和每一列长得一样.也就是说我们只保存第一行就能知道整个矩阵长什么样. 而我们的时间主要浪费在a的相乘上,所以a只维护一行,计算答案时把a还原,更新一行的“a”时亦然…
UVA 1386 - Cellular Automaton option=com_onlinejudge&Itemid=8&page=show_problem&category=489&problem=4132&mosmsg=Submission+received+with+ID+13911770" target="_blank" style="">题目链接 题意:给定一个n格的环,如今有个距离d.每次变化把环…
Cellular Automaton Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 3048   Accepted: 1227 Case Time Limit: 2000MS Description A cellular automaton is a collection of cells on a grid of specified shape that evolves through a number of dis…
题面:UVA1386 Cellular Automaton 矩阵乘法+快速幂解法: 这是一个比较裸的有点复杂需要优化的矩乘快速幂,所以推荐大家先做一下下列洛谷题目练练手: (会了,差不多就是多倍经验题了) 注:如果你还不会矩阵乘法,可以移步了解一下P3390的题解 P1939 [模板]矩阵加速(数列) P3390 [模板]矩阵快速幂 P1962 斐波那契数列 P4910 帕秋莉的手环 P4838 P哥破解密码 然后讲一下本题,读题我们发现这个环上所进行的 k 次操作都是一模一样的,还是相邻的数的…
A cellular automaton is a collection of cells on a grid of specified shape that evolves through a number of discrete time steps according to a set of rules that describe the new state of a cell based on the states of neighboring cells. The order of t…
题目大意:给定n(1<=n<=500)个数字和一个数字m,这n个数字组成一个环(a0,a1.....an-1).假设对ai进行一次d-step操作,那么ai的值变为与ai的距离小于d的全部数字之和模m.求对此环进行K次d-step(K<=10000000)后这个环的数字会变为多少. 看了一篇博客:http://www.cppblog.com/varg-vikernes/archive/2011/02/08/139804.html说的非常清楚. 拿例子来说: a矩阵: a = 1 2 2…
http://poj.org/problem?id=3150 这题裸的矩阵很容易看出,假设d=1,n=5那么矩阵是这样的 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0 0 1 1 这是n^3的,可是n<=500,显然tle 我们观察这个n×n的矩阵,发现没一行都是由上一行向右移得到的. 而根据Cij=Aik×Bkj,我们可以发现,其实Bkj==Akj==Ai(j-k) 那么就可以降二维变一维,每一次只要算第一行即可,即Cj=Ak*Bj-k #includ…
Cellular Automaton Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 3504 Accepted: 1421 Case Time Limit: 2000MS Description A cellular automaton is a collection of cells on a grid of specified shape that evolves through a number of discret…
题目链接:http://poj.org/problem?id=3150 题目意思:有n个数围成一个环,现在有一种变换,将所有距离第i(1<=i<=n)个数小于等于d的数加起来,对m取余,现在要求将所有的数都变换k次,得到的n个数的值. 思路:构造一个循环矩阵,以下这个矩阵是以样例1为例的循环矩阵. 我们发现n尽然达到了500,复杂度是n^3logk,过不了,我们发现这个矩阵长得很奇葩,每一行都是上一行后移一位得到,所以我们每个矩阵可以n^2算出一行,然后通过平移得到全部的矩阵.从而把n^3的矩…
题意:给一个环,环上有n块,每块有个值,每一次操作是对每个点,他的值变为原来与他距离不超过d的位置的和,问k(10^7)次操作后每块的值. 解法:一看就要化为矩阵来做,矩阵很好建立,大白书P157页有讲,大概为: [1 1 0 .. 0 1] [1 1 1 .. .. 0] ... [1 1 .. .. .. 1]  的循环矩阵,可以证明,循环矩阵的乘积还是循环矩阵,且循环矩阵的性质: a[i][j] = a[i-1][j-1] (循环的) ,所以,我们每次矩阵相乘只需要算出第一行,余下的不需要…