• hdu 1671 Phone List(字典树)


    知道bug的时候我眼泪掉下来。。。

    我的第一道字典树,看了字典树的注意事项和实现方式,我写这道题的时候格外认真,就是奔着1A去的。结果这是几A来着?

    第一遍写的时候提交MLA,我看了一下,是因为我释放内存的函数写的有问题,‘==’写成了‘=’。修改之后提交wa,这个我就想不明白了,我可是测试了很多组数据的。

    之后又尝试性的做了一个小小地修改,再次提交还是wa。然后是各种思考bug,想了好久突然想到我是用数字输入的,这样的话前导0会被忽略掉。

    我的1A就这么没了。

    #include<stdio.h>
    #include<string.h>
    #include<malloc.h>
    #define N 15
    struct node
    {
        node* a[10];
        int flag;
    };
    node *root;
    int InsertTree(char *ss)
    {
        int k,mark[15];
    	int ln;
        ln=strlen(ss);
    	k=0;
    	int i;
    	for(i=ln-1;i>=0;i--)
    		mark[k++]=ss[i]-'0';
        node *cur=root;
        node *s;
        int flag=0;
        for(i=k-1;i>=0;i--)
        {
            if(i!=0)
            {
                if(cur->flag==1)
                {
                    flag=1;
                    break;
                }
                if(cur->a[mark[i]]!=NULL&&cur->a[mark[i]]->flag!=1)
                    cur=cur->a[mark[i]];
                else if(cur->a[mark[i]]!=NULL&&cur->a[mark[i]]->flag==1)
                {
                    flag=1;
                    break;
                }
                else
                {
                    s=(node *)malloc(sizeof(node));
                    memset(s->a,0,sizeof(s->a));
                    cur->a[mark[i]]=s;
                    s->flag=0;
                    cur=s;
                }
            }
            else
            {
                if(cur->a[mark[i]]!=NULL)
                {
                    flag=1;
                    break;
                }
                else
                {
                    s=(node *)malloc(sizeof(node));
                    memset(s->a,0,sizeof(s->a));
                    cur->a[mark[i]]=s;
                    s->flag=1;
                    cur=s;
                }
            }
        }
        return flag;
    }
    void Free(node *root)
    {
        if(root->flag==1)
            free(root);
        else
        {
            int i;
            for(i=0;i<=9;i++)
            {
                if(root->a[i]!=NULL)
                    Free(root->a[i]);
            }
            free(root);
        }
        return ;
    }
    int main()
    {
        int T;
        scanf("%d",&T);
    	char s[15];
        while(T--)
        {
            int n;
            scanf("%d",&n);
    		getchar();
            root=(node *)malloc(sizeof(node));
            memset(root->a,0,sizeof(root->a));
            root->flag=0;
            int flag=0;
            while(n--)
            {
                int x;
                gets(s);
                if(InsertTree(s))
                    flag=1;
            }
            if(flag)
                printf("NO
    ");
            else
                printf("YES
    ");
            Free(root);
        }
        return 0;
    }


  • 相关阅读:
    ActiveMQ( 一) 同步,异步,阻塞 JMS 消息模型
    rocketmq (一)运行原理以及使用问题
    Springboot+ActiveMQ(ActiveMQ消息持久化,保证JMS的可靠性,消费者幂等性)
    ActiveMQ(下载,启动,java程序中 如何操作)
    ActiveMQ(为什么要使用消息中间件,JMS传输模型)
    java(线程池的创建方式,和线程池的原理)
    java多线程
    Zookeeper实现负载均衡
    Zookeeper实现分布式锁
    SpringCloud-断路器(Hystrix)
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3199027.html
Copyright © 2020-2023  润新知