Light OJ 1224

来源:互联网 发布:进程调度算法c语言 编辑:程序博客网 时间:2024/06/10 03:56

  字典树入门题,建议还是自己敲一下,毕竟太基础了。

#include<cstring>#include<algorithm>#include<cmath>#include<cstdio>#include<cstdlib>using namespace std;char s[55];typedef struct Tries{    int cur,deepth;    Tries *next[4];}Trie;Trie *root;int ans;int xu(char ch){    if(ch=='A') return 0;    else if(ch=='C') return 1;    else if(ch=='G') return 2;    else return 3;}void buildroot(){    root=(Trie *)malloc(sizeof(Trie));    for(int i=0;i<4;i++)        root->next[i]=NULL;    root->cur=0;    root->deepth=0;}void buildTrie(char *str){    int len= strlen(str),i;    Trie *p= root, *q;    for(i=0; i<len; i++)    {        int num=xu(s[i]);        if(p->next[num]==NULL)        {            q=(Trie *)malloc(sizeof(Trie));            for(int j=0;j<4;j++)               q->next[j]=NULL;            q->cur=q->deepth=0;            q->cur++;            q->deepth=i+1;            p->next[num]=q;            p= p->next[num];        }        else        {            p->next[num]->cur++;            p->next[num]->deepth=i+1;            p = p->next[num];        }    }}void searchTrie(Trie *r){  ans=max(ans,r->cur*r->deepth);  if(r->next[0]==NULL&&r->next[1]==NULL&&r->next[2]==NULL&&r->next[3]==NULL)       return ;  if(r->next[0]!=NULL)  {      searchTrie(r->next[0]);  }  if(r->next[1]!=NULL)  {      searchTrie(r->next[1]);  }  if(r->next[2]!=NULL)  {      searchTrie(r->next[2]);  }  if(r->next[3]!=NULL)  {      searchTrie(r->next[3]);  }}int main(){    int T,i,j,n;    scanf("%d",&T);    for(i=1;i<=T;i++)    {        scanf("%d",&n);        buildroot();        for(j=1;j<=n;j++)        {            scanf("%s",s);            buildTrie(s);        }        ans=0;        searchTrie(root);        printf("Case %d: %d\n",i,ans);    }    return 0;}


0 0