CF710F String Set Queries

题目描述

你需要对一个字符串集合 $D$ 处理 $m$ 个查询。每个查询有三种类型之一: 1. 向集合 $D$ 中添加一个字符串 $s$。保证字符串 $s$ 之前没有被添加过。 2. 从集合 $D$ 中删除一个字符串 $s$。保证字符串 $s$ 当前在集合 $D$ 中。 3. 给定字符串 $s$,求集合 $D$ 中所有字符串在 $s$ 中出现的次数总和。如果集合 $D$ 中的某个字符串 $p$ 在 $s$ 中出现了多次,则应计入所有出现次数。 请注意,你需要以在线模式(online)解决此问题。这意味着你不能一次读取所有输入。你只能在输出上一个三类查询的答案后读取下一个查询。在你的程序中,你需要在每次输出后调用 C++ 的 fflush 或 Java 的 BufferedWriter.flush 函数。

输入格式

第一行包含一个整数 $m$($1 \leq m \leq 3 \cdot 10^{5}$),表示查询的数量。 接下来的 $m$ 行,每行包含一个整数 $t$($1\leq t \leq 3$)和一个非空字符串 $s$,表示查询的类型以及需要处理的字符串。所有字符串仅包含小写英文字母。 输入中所有字符串总长度不超过 $3 \cdot 10^{5}$。

输出格式

对于每个三类查询,输出一个整数 $c$,表示集合 $D$ 中所有字符串在 $s$ 中出现的次数之和。

说明/提示

由 ChatGPT 5 翻译