当前你的浏览器版本过低,网站已在兼容模式下运行,兼容模式仅提供最小功能支持,网站样式可能显示不正常。
请尽快升级浏览器以体验网站在线编辑、在线运行等功能。

建议使用的浏览器:

谷歌Chrome 火狐Firefox Opera浏览器 微软Edge浏览器 QQ浏览器 360浏览器 傲游浏览器

1122:Filtration

题目描述

Digital Signal Processing is used for such clever effects as the "echo" often heard in music, or that annoying modulation done with the voices of certain singers. The field makes the use of

Finite Impulse Response

(FIR) filters to make these effects happen.

Consider an input stream of samples, represented as a series of integers between 0 and 255 inclusive. (This is, you should not be surprised to discover, the range of an 8-bit sample.) These samples come in a very specific sequence, one after the other, as the digital representation of a given waveform. A FIR mixer will take multiple streams and combine them into one, a FIR echo filter will take one input and provide a single output, and so on.

A FIR filter can be represented as an equation, with the input signals on one side and the output on the other. For example:

   Y = X[0] + X[-5]

represents an echo filter (more specifically, a post-echo filter); a given sample of Y is equal to the value of X at the same location in the input stream, plus the value of the sample that occurred five samples prior in X. Values that are not available (such as X[-5] for the first four samples of X) are set to 0.

In this problem, all FIR equations obey the following Backus-Naur Form (BNF) grammar:

EQUATION ::=  STREAM  __  "="  __  EXPR
STREAM ::= A single upper-case letter representing a sample stream, such as A or X
EXPR ::=  VALUE  |  SAMPLE  |  EXPR  __  OPER  __  EXPR  |  "("  __  EXPR  __  ")"
VALUE ::= A floating-point number, such as 0.25, 5, or -1.5
SAMPLE ::=  STREAM  "[OFFSET  "]"
OFFSET ::=  An integer representing the sample offset into the stream, such as 0, 1, or -5, between -100 and 100 inclusive.
OPER ::=  "*"  |  "+"  |  "-"

Operations are handled in the standard order of precedence (parentheses first, multiplication before addition and subtraction, otherwise left-to-right), and the resulting value is rounded down to the nearest integer between 0 and 255 only after all calculations (if any) are done by the FIR filter. The __ symbol in the above grammar specifies a series of one or more spaces. Note that whitespace in an equation is only allowed where explicitly specified by the above grammar.

For example, a simple low-pass filter could be expressed as:

   Z = 0.5 * Y[0] + 0.25 * Y[-1] + 0.25 * Y[1]

Each output value of Z is based on the matching value in Y, modified by the nearest values of Y. A simple mixer can be represented as follows:

   D = C[0] + B[0]

although the clipping problems that such a filter would have should be apparent.

Obviously, for complicated effects, a number of filters can be connected together. In this problem, this is represented by STREAM; any relevant stream will either be an input value (the source audio, for example) or the output of a single FIR filter. However, a stream may be used as an input by more than one other filter. This constitutes a filter network.

Given a series of definitions of FIR filters and starting inputs, your task is to provide all of the outputs of the various filters. No FIR filter will have more than 10 operators or more than ten pairs of parentheses, nor will its representation use more than 80 characters. There will be at least one input stream and at least one output stream per data set, and all streams referenced in a filter equation will be defined in the same data set. All input streams and output streams will have the same number of samples, and there will be no "feedback loops" described by a filter network; that is, no filter will have input dependent on its output.

Although they sure sound cool when Pete Townshend uses them.

输入解释

Input to this problem will begin with a line containing a single integer

D

(1 ≤

D

≤ 100) indicating the number of data sets. Each data set consists of the following components:

  • A line containing a single integer N (2 ≤ N ≤ 26) indicating the number of streams in the data set;
  • A line containing a single integer S (1 ≤ S ≤ 100) indicating the number of samples in every stream of the data set;
  • A series of N lines, each representing one of the streams. There will be no duplicate stream names in a data set, and each stream is one of either:
    • an input stream, in which case its representation is of the form "STREAM % sam1 sam2 sam3 samS", where STREAM is a single capital letter, and sam1 is the first sample of the input stream, sam2 is the second sample, and so on. The individual samples and the % operator are all separated with whitespace.
    • a FIR filter, in which case its representation is of the form "STREAM = EXPR", as described above.
输出解释

For each data set in the input, output the heading "DATA SET #k" where k is 1 for the first data set, 2 for the second, and so on. Then print the output sample streams for every FIR filter in the data set, in alphabetical order, in the format "STREAM % sam1 sam2 sam3 samS".

输入样例
3
3
5
A % 10 20 30 20 10
B = A[0] + A[-1]
C = 0.5 * ( A[0] + B[0] )
3
5
Z = 0.5 * Y[0] + 0.5 * B[0]
Y % 50 10 50 10 50
B % 10 50 10 50 15
3
5
A % 1 2 3 4 5
B = A[-2]
C = B[2]
输出样例
DATA SET #1
B % 10 30 50 50 30
C % 10 25 40 35 20
DATA SET #2
Z % 30 30 30 30 32
DATA SET #3
B % 0 0 1 2 3
C % 1 2 3 0 0

该题目包含在题集 ACM赛制

共提交 1

通过率 100.0%
时间上限 内存上限
1000 MS 128 MB