当前位置 : 主页 > 手机开发 > harmonyos >

poj 3630

来源:互联网 收集:自由互联 发布时间:2023-10-08
这道题是得用静态内存方式的trie树,动态链表形式的trie树会TLE #includecstdio#includecstring#includecstdlibconst int Max=10;using namespace std;struct trie{ int next[Max]; int flag;}node[100000];int num;struct trie root


这道题是得用静态内存方式的trie树,动态链表形式的trie树会TLE

#include<cstdio>
#include<cstring>
#include<cstdlib>
const int Max=10;
using namespace std;
struct trie{
    int next[Max];
    int flag;
}node[100000];
int num;
struct trie root;
bool insert(char * str){
    int i,len,tem,p;
    p=0;
    len=strlen(str);
    for(i=0;i<len;i++){
        tem=str[i]-'0';
        if(node[p].next[tem]!=-1){
            p=node[p].next[tem];
            if(i==len-1)
                return 1;
            if(node[p].flag==1)
                return 1;
        }
        else{
            node[p].next[tem]=++num;
            p=num;
        }
        if(i==len-1)
            node[p].flag=1;
    }
    return 0;
}
int main(){
    int T,t,n,i;
    char s[15];
    bool yes;
    scanf("%d",&T);
    for(t=1;t<=T;t++){
        scanf("%d",&n);
        memset(node,-1,sizeof(node));     ///初始化莫忘
        yes=0;
        num=0;
        root=node[0];
        for(i=1;i<=n;i++){
            scanf("%s",s);
            if(yes==0)
                if(insert(s))
                    yes=1;
        }
        if(yes==0)
            printf("YES\n");
        else
            printf("NO\n");
    }
}

 

注意写静态内存方式的trie树时不要乱写指针,我就悲剧的调试好久没有结果

 

#include<cstdio>
#include<cstring>
#include<cstdlib>
const int Max=10;
using namespace std;
struct trie{
    struct trie * next[Max];
    int flag;
    trie(){
        flag=0;
        for(int i=0;i<10;i++)
            next[i]=NULL;
    }
}node[200000];
int num;
struct trie root;
bool insert(char * str){
    int i,len,tem;
    struct trie* p,q;
    p=&root;
    len=strlen(str);
    for(i=0;i<len;i++){
        tem=str[i]-'0';
        if(p->next[tem]!=NULL){
            if(i==len-1)
                return 1;
            if(p->flag==1)
                return 1;
            p=p->next[tem];
        }
        else{
            q=node[num++];
            p->next[tem]=&q;
            p=&q;
        }
    }
    p->flag=1;
    return 0;
}
int main(){
    int T,t,n,i;
    char s[15];
    bool yes;
    scanf("%d",&T);
    for(t=1;t<=T;t++){
        scanf("%d",&n);
        yes=0;
        num=1;
        root=node[0];
        for(i=1;i<=n;i++){
            scanf("%s",s);
            if(yes==0)
                if(insert(s))
                    yes=1;
        }
        if(yes==0)
            printf("YES\n");
        else
            printf("NO\n");
    }
    system("pause");
}

 

【文章转自:香港多ip服务器 http://www.558idc.com/hkzq.html提供,感恩】
上一篇:poj 2406
下一篇:没有了
网友评论