#CF2041I. 自动补全
自动补全
I. 自动补全
时间限制:每个测试点 4 秒
内存限制:每个测试点 1024 MB
题目描述
你正在设计一款时髦的新文本编辑器,想要添加一个便捷的自动补全功能来帮助用户节省时间。其工作方式如下:如果用户输入 "App",编辑器会神奇地建议单词 "Application"!更棒的是,用户还可以在编辑器中个性化设置自动补全的单词。
编辑器支持 4 种操作(设编辑器中的当前文本为 ):
- 添加一个自动补全模式 。
- 删除一个自动补全模式 。
- 追加一个字符串 到 的末尾。
- 删除 个字符从 的末尾。注意:如果 大于 的长度,则删除 中的所有字符。
每次操作后,编辑器应建议一个满足以下条件的自动补全候选项 :
- 字符串 的前缀等于 ;
- 如果有多个 ,选择最长的那个;
- 如果仍有多个,选择字典序最小的那个;
- 如果仍有多个,选择 ID 最小 的那个。
为简化问题,每次操作后输出建议的自动补全模式 ID。如果没有匹配,输出 。
示例
假设有三个候选项:"alice"、"bob"、"charlie",ID 分别为 、、。
初始时屏幕为空,因此建议 "charlie"(),因为它最长。
接着用户输入 "b",建议 "bob"(),因为它是唯一以 "b" 开头的。
最后用户输入 "body",输出 ,因为没有匹配的模式。
输入格式
第一行包含一个整数 ,接下来 行,每行包含一个操作。
共有四种操作类型:
add i pidelete iappend sbackspace c
参数之间由单个空格分隔。
数据范围:
- 所有 和 的字符总数不超过
- 和 可包含任意可打印字符(ASCII 33 到 126),不含空格
- 每个
add操作的 ID 唯一 delete的 ID 保证合法- 每个 ID 满足
输出格式
程序应输出 行。对于每个操作,输出一个整数 ,表示该操作后建议的自动补全模式 ID。如果没有匹配,输出 。
输入输出样例
样例输入 1
6
add 1 pattern1_alice
add 2 pattern2_bob
add 3 pattern3_charlie
append pattern
append 2_bobabc
backspace 3
样例输出 1
1
1
3
3
-1
2
样例输入 2
6
append pattern
add 1 pattern1_alice____
add 2 pattern2_bob______
add 3 pattern3_charlie__
delete 1
delete 2
样例输出 2
-1
1
1
1
2
3