uva1386 Cellular Automaton
来源:互联网 发布:淘宝怎么打开链接 编辑:程序博客网 时间:2024/06/09 18:52
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 the cellular automaton is
the number of cells it contains. Cells of the automaton of order n are
numbered from 1 to n. The order of the cell is the number of different
values it may contain. Usually, values of a cell of order m are
considered to be integer numbers from 0 to m−1. One of the most
fundamental properties of a cellular automaton is the type of grid on
which it is computed. In this problem we examine the special kind of
cellular automaton — circular cellular automaton of order n with cells
of order m. We will denote such kind of cellular automaton as n,m−
automaton. A distance between cells i and j in n,m-automaton is defined
as min(|i − j|,n −|i − j|). A denvironment of a cell is the set of
cells at a distance not greater than d. On each d-step values of all
cells are simultaneously replaced by new values. The new value of cell
i after d-step is computed as a sum of values of cells belonging to
the d-enviroment of the cell i modulo m. The following picture shows
1-step of the 5,3-automaton. The problem is to calculate the state of
the n,m-automaton after k d-steps. Input The input file contains
several test cases, each of them consists of two lines, as described
below. The first line of the input contains four integer numbers n, m,
d, and k (1 ≤ n ≤ 500, 1 ≤ m ≤ 1000000, 0 ≤ d < n 2 , 1 ≤ k ≤
10000000). The second line contains n integer numbers from 0 to m−1 —
initial values of the automaton’s cells. Output For each test case,
write to the output, on a line by itself, the values of the
n,m-automaton’s cells after k d-steps.
容易发现可以采用矩阵快速幂,但是这样做是
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define LL long longint n,m,d,k;struct mat{ int a[510]; mat operator * (const mat &rhs) const { mat ret; for (int i=0;i<n;i++) { ret.a[i]=0; for (int j=0;j<n;j++) ret.a[i]=(ret.a[i]+(LL)a[j]*rhs.a[((i-j)%n+n)%n]%m)%m; } return ret; }}a,base;int main(){ int i; while (scanf("%d%d%d%d",&n,&m,&d,&k)==4) { for (i=0;i<n;i++) scanf("%d",&a.a[i]); for (i=0;i<n;i++) base.a[i]=(i<=d||i>=n-d); while (k) { if (k&1) a=a*base; base=base*base; k>>=1; } for (i=0;i<n;i++) printf("%d%c",a.a[i],i==n-1?'\n':' '); }}
- uva1386 Cellular Automaton
- uva1386 - Cellular Automaton 循环矩阵
- UVA1386-Cellular Automaton(循环矩阵)
- poj3150 Cellular Automaton
- poj 3150 Cellular Automaton
- POJ 3150 Cellular Automaton
- POJ Cellular Automaton
- poj 3150 Cellular Automaton
- POJ 3150 Cellular Automaton
- UVA - 1386 Cellular Automaton
- 【poj3150】Cellular Automaton
- UVa 1386 - Cellular Automaton
- poj 3150 Cellular Automaton
- POJ3150---Cellular Automaton(矩阵)
- POJ 3150 Cellular Automaton
- UVA 1386 Cellular Automaton
- POJ 3150 Cellular Automaton
- poj 3150 Cellular Automaton
- sk_buff 详解(一)
- 利用QT中Qpainter画点,直线,弧线等简单图形
- opencv学习笔记(二十)cvFilter2D()卷积以及卷积边界的处理
- java.lang.OutOfMemoryError: PermGen space错误jdk内存溢出配置
- uart自动流控制
- uva1386 Cellular Automaton
- C++ Qt5 范例开发大全:
- python跳过第一行快速读取文件内容
- FFmpeg源码分析之MpegTS.c
- ActiveMQ入门基本知识(2)
- 读jvm虚拟机的总结
- java常用设计模式
- QT编写纯C或C++项目时乱码:
- Qt绘图练习-Clock