CF200D Programming Language
题目描述
最近,Valery 遇到了一种全新的编程语言。这种语言最吸引他的是模板函数和过程。我们提醒你,模板是语言中的工具,旨在编写与某些参数(如数据类型、缓冲区大小、默认值)无关的通用算法。
Valery 决定更详细地研究该语言中的模板过程。模板过程的描述包括过程名和参数类型列表。泛型类型 T 参数可以用作模板过程的参数。
一次过程调用由过程名和变量参数列表构成。若满足以下条件,我们称某个过程「适用于」这次调用:
- 过程名与调用的过程名相同;
- 过程的参数个数与调用传入的参数个数相同;
- 调用中各变量的类型与过程对应参数的类型能对应。若参数为泛型类型 T,或变量和参数的类型完全一致,则两者匹配。
现在给定一组模板过程的描述、一组程序中使用的变量,以及使用这些变量的过程调用。对于每一次调用,计算有多少个过程适用于该调用。
输入格式
第一行包含一个整数 $n$($1 \leq n \leq 1000$),表示模板过程的数量。接下来的 $n$ 行,每行描述一个过程,格式如下:
```
void procedureName(type_1, type_2, ..., type_t)
```
其中 $1 \leq t \leq 5$,void 是关键字,procedureName 是过程名,type_i 是第 $i$ 个参数的类型。参数类型可以为 int、string、double,以及表示泛型类型的关键字 T。
接下来一行包含一个整数 $m$($1 \leq m \leq 1000$),表示变量的数量。接下来的 $m$ 行,每行描述一个变量,格式如下:
```
type variableName
```
其中 type 为 int、string 或 double,variableName 是该变量的名称。
接下来一行包含一个整数 $k$($1 \leq k \leq 1000$),表示过程调用的数量。接下来的 $k$ 行,每行描述一次调用,格式如下:
```
procedureName(var_1, var_2, ..., var_t)
```
其中 procedureName 是过程名,var_i 是变量名。
过程、变量和调用的描述行可能在行首、行尾、括号、逗号前后包含空格。void 关键字前后也可能包含空格。每行长度不超过 $100$。变量和过程名均为不超过 $10$ 个字符的非空由小写英文字母和数字组成的字符串。只有具体描述的变量会用于过程调用。变量名互不相同。没有两份完全相同的过程描述。若过程名和参数类型列表(顺序一致)均相同,则认为过程描述完全相同。
输出格式
共 $k$ 行,每行输出一个整数,第 $i$ 行表示第 $i$ 次过程调用可以使用的模板过程数量。
说明/提示
由 ChatGPT 5 翻译