zoukankan      html  css  js  c++  java
  • 2016"百度之星"

    Problem Description

    度熊手上有一本神奇的字典,你可以在它里面做如下三个操作:

    1、insert : 往神奇字典中插入一个单词
    
    2、delete: 在神奇字典中删除所有前缀等于给定字符串的单词
    
    3、search: 查询是否在神奇字典中有一个字符串的前缀等于给定的字符串
    
    Input

    这里仅有一组测试数据。第一行输入一个正整数N (1leq Nleq 100000)N(1N100000),代表度熊对于字典的操作次数,接下来NN行,每行包含两个字符串,中间中用空格隔开。第一个字符串代表了相关的操作(包括: insert, delete 或者 search)。第二个字符串代表了相关操作后指定的那个字符串,第二个字符串的长度不会超过30。第二个字符串仅由小写字母组成。

    Output

    对于每一个search 操作,如果在度熊的字典中存在给定的字符串为前缀的单词,则输出Yes 否则输出 No。

    Sample Input
    5
    insert hello
    insert hehe
    search h
    delete he
    search hello
    
    Sample Output
    Yes
    No
    字典树的操作~模版自己加了删除语句
      1 #include<stdio.h>
      2 //#include<bits/stdc++.h>
      3 #include<string.h>
      4 #include<iostream>
      5 #include<math.h>
      6 #include<sstream>
      7 #include<set>
      8 #include<queue>
      9 #include<map>
     10 #include<vector>
     11 #include<algorithm>
     12 #include<limits.h>
     13 #define inf 0x7fffffff
     14 #define INFL 0x7fffffffffffffff
     15 #define lson l,m,rt<<1
     16 #define rson m+1,r,rt<<1|1
     17 #define LL long long
     18 #define ULL unsigned long long
     19 using namespace std;
     20 
     21 typedef struct Trie{
     22     int v;
     23     Trie *next[26];
     24 }Trie;
     25 Trie root;
     26 void createTrie(char *str)
     27 {
     28     int len = strlen(str);
     29     Trie *p = &root, *q;
     30     for(int i=0; i<len; ++i)
     31     {
     32         int id = str[i]-'a';
     33         if(p->next[id] == NULL)
     34         {
     35             q = (Trie *)malloc(sizeof(root));
     36             q->v = 1;
     37             for(int j=0; j<26; ++j)
     38                 q->next[j] = NULL;
     39             p->next[id] = q;
     40             p = p->next[id];
     41         }
     42         else
     43         {
     44             p->next[id]->v++;
     45             p = p->next[id];
     46         }
     47     }
     48 }
     49 
     50 int findTrie(char *str)
     51 {
     52     int len = strlen(str);
     53     Trie *p = &root;
     54     for(int i=0; i<len; ++i)
     55     {
     56         int id = str[i]-'a';
     57         p = p->next[id];
     58         if(p == NULL)
     59             return 0;
     60     }
     61     return p->v;
     62 }
     63 void dele(char *str,int n)
     64 {
     65     Trie *p = &root;
     66     int len = strlen(str);
     67     for(int i=0; i<len; ++i)
     68     {
     69         int id = str[i]-'a';
     70         p = p->next[id];
     71         p->v-=n;
     72     }
     73     for(int j=0; j<26; ++j)
     74     {
     75          p->next[j] = NULL;
     76     }
     77 }
     78 int main()
     79 {
     80     int t;
     81     char s1[10000],s2[10000];
     82     for(int i=0;i<26;i++)
     83     {
     84         root.next[i]=NULL;
     85     }
     86     cin>>t;
     87     while(t--)
     88     {
     89         scanf("%s%s",s1,s2);
     90         if(s1[0]=='i')
     91         {
     92             createTrie(s2);
     93         }
     94         else if(s1[0]=='s')
     95         {
     96             int ans=findTrie(s2);
     97             if(ans)
     98             {
     99                 puts("Yes");
    100             }
    101             else
    102             {
    103                 puts("No");
    104             }
    105         }
    106         else
    107         {
    108             int cnt=findTrie(s2);
    109             if(cnt)
    110             {
    111                 dele(s2,cnt);
    112             }
    113         }
    114     }
    115     return 0;
    116 }
  • 相关阅读:
    Trie树-0/1字典树-DFS-1624. 最大距离
    图-连通分量-DFS-749. 隔离病毒
    贪心-谷歌-857. 雇佣 K 名工人的最低成本
    图-搜索-DFS-51. N皇后
    图-连通分量-DFS-并查集-695. 岛屿的最大面积
    图-最小生成树-629. 最小生成树
    codeforces 493 D Vasya and Chess【 博弈 】
    POJ 2155 Matrix【 二维树状数组 】
    HDU 5273 Dylans loves sequence【 树状数组 】
    POJ 1195 Mobile phones【 二维树状数组 】
  • 原文地址:https://www.cnblogs.com/yinghualuowu/p/5495535.html
Copyright © 2011-2022 走看看