题目描述
给定一个由变量集合 V 和函数符号集合 F 定义的特定领域中的术语集。术语集根据以下规则归纳定义:
1.任何变量都是一个术语。
2.任何函数符号 f 满足 ar(f)=0 是一个术语。
3.任何表达式 f(t1,…,tn),其中 ar(f)=n≥1 且每个参数 ti((1≤i≤n)都是一个术语,也是一个术语。
这里 ar 是从函数符号集合 F 到自然数的函数,表示每个函数符号的参数数量。
现在,我们希望以有向无环多重图(Directed Acyclic Multigraph, DAM)的形式来表示术语,以优化存储和计算效率。在DAM中,顶点被标记为来自 F 的函数符号或来自 V 的变量,边被标记为对应子术语在术语结构中的参数位置。
对于给定的术语字符串表示,你的任务是计算表示该术语的DAM所需的最小顶点数,即共享最多子术语的DAM的大小。
输入
输入包含多个测试用例,每个测试用例是一行,表示一个术语的字符串表示 s。变量 V 在 s 中由以大写字母开头的字符串 v(长度 1≤∣v∣≤20)表示,包含小写和大写英文字母。函数符号 F 在 s 中由以小写字母开头的字符串 f(长度 1≤∣f∣≤20)表示,同样包含小写和大写英文字母。每个测试用例的字符串长度 1≤∣s∣≤105。你可以假设每个测试用例中的变量和函数符号总数不超过 2000(不一定各不相同)。
输出
对于每个测试用例,输出表示 s 的DAM所需的最小顶点数。 源码
题目描述
给定一个由变量集合 $ V $ 和函数符号集合 $ F $ 定义的特定领域中的术语集。术语集根据以下规则归纳定义:
1.任何变量都是一个术语。
2.任何函数符号 $ f $ 满足 $ \text{ar}(f) = 0 $ 是一个术语。
3.任何表达式 $ f(t_1, \ldots, t_n) $,其中 $ \text{ar}(f) = n \geq 1 $ 且每个参数 $ t_i (( 1 \leq i \leq n $)都是一个术语,也是一个术语。
这里 $ \text{ar} $ 是从函数符号集合 $ F $ 到自然数的函数,表示每个函数符号的参数数量。
现在,我们希望以有向无环多重图(Directed Acyclic Multigraph, DAM)的形式来表示术语,以优化存储和计算效率。在DAM中,顶点被标记为来自 $ F $ 的函数符号或来自 $ V $ 的变量,边被标记为对应子术语在术语结构中的参数位置。
对于给定的术语字符串表示,你的任务是计算表示该术语的DAM所需的最小顶点数,即共享最多子术语的DAM的大小。
输入
输入包含多个测试用例,每个测试用例是一行,表示一个术语的字符串表示 $ s $。变量 $ V $ 在 $ s $ 中由以大写字母开头的字符串 $ v $(长度 $ 1 \leq |v| \leq 20 $)表示,包含小写和大写英文字母。函数符号 $ F $ 在 $ s $ 中由以小写字母开头的字符串 $ f $(长度 $ 1 \leq |f| \leq 20 $)表示,同样包含小写和大写英文字母。每个测试用例的字符串长度 $ 1 \leq |s| \leq 10^5 $。你可以假设每个测试用例中的变量和函数符号总数不超过 $ 2000 $(不一定各不相同)。
输出
对于每个测试用例,输出表示 $ s $ 的DAM所需的最小顶点数。