zoukankan      html  css  js  c++  java
  • DHU--1247 Hat’s Words && HiHocder--1014 Trie树 (字典树模版题)

    题目链接

    DHU--1247 Hat’s Words

    HiHocder--1014 Trie树 

    两个一个递归方式一个非递归

    HiHocoder 

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 100010
    struct ac{
       int sum,nex[26],fa;
    }tre[maxn*4];
    int tot=0,len=0;
    string s;
    void updata(int x,int y){
       if(x>=s.size()) return ;
       int k=s[x]-'a';
       int i;
       if(tre[y].nex[k]){
          i=tre[y].nex[k];
          tre[i].sum++;
          updata(++x,i);
       }else{
          tre[y].nex[k]=++tot;
          tre[tot].sum=1;
          i=tot;
          updata(++x,i);
       }
       if(x==s.size()-1){
         tre[i].fa++;
       }
    }
    int query(int x,int y){
       int k=s[x]-'a';
       if(x==s.size()-1){
          int i=tre[y].nex[k];
          return tre[i].sum;
       }
       if(tre[y].nex[k]){
          return query(++x,tre[y].nex[k]);
       }
       return 0;
    }
    int main(){
       memset(tre,0,sizeof(tre));
       int n,m;
       cin>>n;
       for(int j=0;j<n;j++){
         cin>>s;
         updata(0,0);
       }
       cin>>m;
       for(int j=0;j<m;j++){
          cin>>s;
          printf("%d
    ",query(0,0));
       }
    }
    /*
    5
    babaab
    babbbaaaa
    abba
    aaaaabaa
    babaababb
    5
    babb
    baabaaa
    bab
    bb
    bbabbaab
    求前缀
    1
    0
    3
    0
    0
    */

    HDU

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 100000
    char a[50005][30];
    int len=0,tot=0;
    struct ac{
       int sum,nex[26],fa,c;
       void init(){
         sum=0;fa=0;
         memset(nex,0,sizeof(nex));
       }
    }tre[maxn*4];
    void add(char s[]){
       int i=0,j;
       int z=0;
       while(s[i]){
          int k=s[i]-'a';
          if(tre[z].nex[k]){
             j=tre[z].nex[k];
             tre[j].sum++;
             z=j;
          }else{
            tre[z].nex[k]=++tot;
            j=tot;
            tre[j].init();
            tre[j].sum=1;
            z=j;
          }
          i++;
       }
       tre[z].fa++;
    }
    bool query(char s[]){
       int i=0,j,z=0;
       while(s[i]){
          int k=s[i]-'a';
          if(tre[z].nex[k]==0) return 0;
          z=tre[z].nex[k];
          i++;
       }
       if(tre[z].fa) return 1;
       return 0;
    }
    bool query1(char s[]){
       int i=0,j,z=0;
       while(s[i]){
          int k=s[i]-'a';
          z=tre[z].nex[k];
          if(tre[z].fa){
             if(query(s+i+1)) return 1;
          }
          i++;
       }
       return 0;
    }
    int main(){
       while(scanf("%s",a[len++])!=EOF) add(a[len-1]);
       for(int j=0;j<len;j++){
          if(query1(a[j])){
             cout<<a[j]<<endl;
          }
       }
    }
  • 相关阅读:
    Linux命令之more
    Linux命令之sort
    STM32启动模式
    poll调用深入解析
    STM32 控制步进电机 28BYJ-48
    NEC协议
    家用宽带的上传和下载速度
    Ubuntu14.04更新源
    波特率和比特率【串口为例】
    CentOS: make menuconfig error: curses.h: No such file or directory
  • 原文地址:https://www.cnblogs.com/Dvelpro/p/9779974.html
Copyright © 2011-2022 走看看