• poj2001


    #include <iostream>
    #include <string>
    #define mx 1001
    using namespace std;
    struct treenode
    {
     char data;//结点信息
     int num;//记录从根到此处,结点出现的次数
     bool color;//从根到此处是否是关键字
     treenode *next[26];
     treenode(char c)//初始化结点
     {
      data=c;
      num=1;
      color=false;
      for(int i=0;i<26;i++)
       next[i]=NULL;
     }
    };
    void Insert(treenode *root,string str)//插入单词
    {
     int i;
     treenode *p=root;
     if(p==NULL)//树为空(可以不要)
     {
      p=new treenode('A');
      root = p;
     }
     for(i=0;i<str.length();i++)
     {
      int data=str[i]-'a';
      if (p->next[data]==NULL)//不存在该结点
      {
       p->next[data]=new treenode(str[i]);
      }
      else//若存在该结点,则它的个数加1
      {
       p->next[data]->num++;
      }
      p=p->next[data];
     }
     p->color=true;
    }
    void finds(treenode *root,string str)
    {
     treenode *p=root;
     char print[21];
     int i,j=0;
     if(p==NULL)//(可以不要)
      return ;
     for (i=0;i<str.length();i++)
     {
      int data=str[i]-'a';
      if (p->next[data]->color==true||p->next[data]->num>1)
       print[j++]=str[i];
      else
      {
       print[j++]=str[i];
       break;
      }
      p=p->next[data];
     }
     print[j]='\0';
     cout<<' '<<print<<endl;
    }
    int main()
    {
     string a,str[mx];
     int i=0,j;
     treenode *root=new treenode('A');
     while(cin>>a)
     {
      str[i++]=a;
      Insert(root,a);
     }
     for (j=0;j<i;j++)
     {
      cout<<str[j];
      finds(root,str[j]);
     }
     return 0;
    }

  • 相关阅读:
    IOS开发——01_第一个OC程序
    01_iOS开发需要准备什么?
    正则表达式随笔
    .net4.6版本前设置window子窗口位置主窗口闪烁
    [CF1486D] Max Median
    [CF1487D] Pythagorean Triples
    [CF1487E] Cheap Dinner
    [CF1490E] Accidental Victory
    [CF1490F] Equalize the Array
    [CF1490G] Old Floppy Drive
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2181743.html
Copyright © 2020-2023  润新知