5687字典树

news/2024/10/30 13:29:20/

动态开点

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
struct node
{int val;struct node *next[26];
}*head;
void Insert(char *s)
{struct node *pp=head;for(;*s;s++){int id=*s-'a';if(pp->next[id]==NULL){pp->next[id]=(struct node*)malloc(sizeof(struct node));pp->next[id]->val=0;for(int i=0;i<26;i++)pp->next[id]->next[i]=NULL;}pp=pp->next[id];pp->val++;}
}
int Search(char *s)
{
//    struct node *pp=(struct node*)malloc(sizeof(struct node));
//    pp=head;   不要重新申请内存,浪费内存   *******************************struct node *pp=head;for(;*s;s++){int id=*s-'a';if(pp->next[id]==NULL)return 0;pp=pp->next[id];}if(pp->val)return 1;return 0;
}
void DDDD(struct node *pp)
{for(int i=0;i<26;i++){if(pp->next[i]!=NULL)DDDD(pp->next[i]);pp->next[i]=NULL;}pp=NULL;
}
void Delete(char *s)
{struct node *pp=head;int num=0;int len=strlen(s);for(int i=0;i<len;i++){int id=s[i]-'a';if(pp->next[id]==NULL)return;pp=pp->next[id];num=pp->val;}pp=head;for(int i=0;i<len;i++){int id=s[i]-'a';pp=pp->next[id];pp->val=pp->val-num;}DDDD(pp);
}
int main()
{int n;scanf("%d",&n);head=(struct node*)malloc(sizeof(struct node));head->val=0;for(int i=0;i<26;i++)head->next[i]=NULL;while(n--){char s1[10],s2[35];scanf("%s%s",s1,s2);if(s1[0]=='i')Insert(s2);else if(s1[0]=='s')printf(Search(s2)?"Yes\n":"No\n");else if(s1[0]=='d')Delete(s2);}
}

静态

#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <map>
using namespace std;
const int N =1e5*26;
int ch[N][26],tot=1,cnt[N];
void Insert(char *s)
{cnt[1]++;for(int p=1;*s;s++){int t=*s-'a';cnt[p]++;if(!ch[p][t]){ch[p][t]=++ tot;}cnt[p=ch[p][t]]++;}
}int Search(char *s)
{int p=1;while(*s&&p){int t=*(s++)-'a';if(cnt[p])p=ch[p][t];else p=0;}return p;
}
void Delete(char *s)
{int x=cnt[Search(s)];if(!x) return;int p = 1;while(*s&&p){int t=*(s++)-'a';cnt[p]-=x;if(cnt[ch[p][t]]==x){ch[p][t]=0;}p=ch[p][t];}
}int main()
{int n;scanf("%d",&n);char a[10],b[31];for(int i=0;i<n;i++){scanf("%s%s",a,b);if(a[0]=='i')Insert(b);else if(a[0] == 'd')Delete(b);elseputs(Search(b)?"Yes":"No");}
}

http://www.ppmy.cn/news/209538.html

相关文章

hdu 5687 Problem C

点击打开链接 Problem C Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 2240 Accepted Submission(s): 618 Problem Description 度熊手上有一本神奇的字典&#xff0c;你可以在它里面做如下三个操作&…

hdu 5687

Problem C Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 967 Accepted Submission(s): 300 Problem Description 度熊手上有一本神奇的字典&#xff0c;你可以在它里面做如下三个操作&#xff1a; 1、in…

hdu5687

Problem C Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1543 Accepted Submission(s): 450 Problem Description 度熊手上有一本神奇的字典&#xff0c;你可以在它里面做如下三个操作&#xff1a; 1、i…

【FPGA零基础学习之旅#6】ip核基础知识之计数器

&#x1f389;欢迎来到FPGA专栏~ip核基础知识之计数器 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家…

Java006——对第一个Java程序HelloWorld的简单介绍

一、HelloWorld.java程序整体认识 public class HelloWorld { //创建一个名字叫HelloWorld的类&#xff08;Java中的类叫class&#xff09;public static void main(String[] args) {//主程序入口&#xff0c;类似C语言main函数System.out.println("He…

苹果呼叫转移设置不了_怎么设置别人电话打不进来

您可以尝试输入【**21*888888#】并按下拨打键&#xff0c;开启本机的呼叫转移功能&#xff0c;在开启之后别人拨打您的电话会转移到888888这个空号&#xff0c;实现别的电话无法打入的效果。以下就是相关的步骤介绍&#xff1a; 1、只需要在安卓或者苹果iOS 11系统的手机的拨号…

如何转接固定电话(内线)

如何转接固定电话&#xff08;内线&#xff09; 首先&#xff0c;必须是内线电话&#xff0c;只有内线电话才可以转接。如果不是你的电话响&#xff0c;先按*11&#xff0c;进行接听&#xff0c;然后按电话机R键后按分机号挂机后&#xff0c;听到目标话机响铃&#xff0c;挂断自…

智能语音机器人,无人电销时代 科技震撼来袭

马化腾曾在2018中国&#xff08;深圳&#xff09;IT领.袖峰会上表示&#xff0c;数字化转型是一个重大的机遇和挑战。 随着数字化经济的发展&#xff0c;中国的数字媒体进入了一个数据帝国时代。如何管理庞大的数据&#xff0c;建立数据分析和报告&#xff0c;反作用于…