字典树。

插入的时候update一下节点出现的次数。

delete的时候,先把前缀之后的全删了。然后看前缀最后一个节点出现了几次,然后前缀上每个节点的次数都减去这个次数。

前缀从上到下再检查一遍,如果出现了次数为0的节点,也删去。

#include <stdio.h>
#include <math.h>
#include<cstring>
#include<cmath>
#include<map>
#include<string>
#include<algorithm>
using namespace std; struct Node
{
int val;
int f[];
} node[]; int root,n;
char op[], s[];
int tot; int newnode()
{
++tot;
node[tot].val=;
for(int i=; i<; i++) node[tot].f[i]=-;
return tot;
} void Insert()
{
int p=root;
for(int i=; s[i]; i++)
{
if(node[p].f[s[i]-'a']==-) node[p].f[s[i]-'a']=newnode();
p=node[p].f[s[i]-'a'];
node[p].val++;
}
} void Delete()
{
int p=;
bool Find=;
for(int i=; s[i]; i++)
{
if(node[p].f[s[i]-'a']==-)
{
Find=;
break;
}
p=node[p].f[s[i]-'a'];
}
if(Find==) return; for(int i=; i<; i++) node[p].f[i]=-; int Val=node[p].val; p=root;
for(int i=; s[i]; i++)
{
p=node[p].f[s[i]-'a'];
node[p].val=node[p].val-Val;
} p=;
for(int i=; s[i]; i++)
{
int tmp=node[p].f[s[i]-'a'];
if(node[tmp].val==)
{
node[p].f[s[i]-'a']=-;
break;
}
p=node[p].f[s[i]-'a'];
}
} void Search()
{
int p=root; bool flag=;
for(int i=; s[i]; i++)
{
if(node[p].f[s[i]-'a']==-)
{
flag=;
break;
}
p=node[p].f[s[i]-'a'];
} if(flag) printf("No\n");
else printf("Yes\n");
} int main()
{
while(~scanf("%d",&n))
{
tot=; root=;
for(int i=; i<; i++) node[root].f[i]=-;
for(int i=; i<=n; i++)
{
scanf("%s%s",op,s);
if(strcmp(op,"insert")==) Insert();
else if(strcmp(op,"delete")==) Delete();
else if(strcmp(op,"search")==) Search();
}
}
return ;
}

最新文章

  1. web前端基础知识 - Django进阶
  2. matlab神经网络实验
  3. UI基础之UITextField相关
  4. Top JavaScript Frameworks, Libraries &amp; Tools and When to Use Them
  5. Oracle VM VirtualBox虚拟机安装系统
  6. 关于C#虚函数和构造函数的一点理解
  7. Entity Framework 教程(转)
  8. leetcode其余题目
  9. C# Delegate 异步调用
  10. OpenStack学习推荐
  11. 3、MyBatis.Net学习笔记之增删改
  12. IIS给网站地址配置成HTTPS的
  13. 问题解决: WordPress on SAE注册邮件无法发送
  14. 201521123108 《Java程序设计》第7周学习总结
  15. 201521123003《Java程序设计》第4周学习总结
  16. 每天学点SpringCloud(七):路由器和过滤器-Zuul
  17. 2017-9-8-李明Linux:Linux应用与发展
  18. 17.vue移动端项目二
  19. 华为核心交换机绑定IP+MAC+端口案例
  20. Python删除文件及进行文件夹压缩

热门文章

  1. c#操作oracle的通用类
  2. jquery完美实现textarea输入框限制字数
  3. PHP字符串函数试题
  4. 概率好题 Light OJ 1027
  5. make: *** No rule to make target `out
  6. redis 进阶
  7. MyEclipse build path no actions available
  8. VB 对象变量或with块变量未设置
  9. 8.5 sikuli 集成进eclipse 报错:can&#39;t be found on the disk
  10. oracle10g遇到ORA-16038日志无法归档问题