hdu 1671 Phone List && POJ 3630 Phone List(静态申请空间)

Zabbix Trigger actions访问出现500 本篇博客详细介绍了Zabbix访问'Trigger actions'出现的错误状况,访问界面出现500,并提供了解决方案。 阅读详情

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1671

http://poj.org/problem?id=3630

解题思路:

本来不准备写这封博客的,但是今天一学弟对我说,动态申请空间的这份代码在POJ上交会超时,于是试了试,果然超时了。然后就学会了新的处理字典树的方法,静态申请空间,不需要频繁的调用new,所以效率会更高。。。

AC代码(动态申请空间,hdu能过,poj超时):

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

char str[10005][15];

struct node
{
    int cnt;
    struct node *next[10];
    node()
    {
        cnt = 0;
        memset(next,0,sizeof(next));
    }
};

node *root = NULL;

void buildtrie(char *s)
{
    node *p = root;
    node *tmp = NULL;
    int i,l = strlen(s);
    for(i = 0; i < l; i++)
    {
        if(p->next[s[i]-'0'] == NULL)
        {
            tmp = new node;
            p->next[s[i]-'0'] = tmp;
        }
        p = p->next[s[i]-'0'];
        p->cnt++;
    }
}

bool findtrie(char *s)
{
    node *p = root;
    int i,l = strlen(s);
    for(i = 0; i < l; i++)
        p = p->next[s[i]-'0'];
    if(p->cnt != 1)
        return true;
    return false;
}

void del(node *root)
{
	for(int i = 0; i < 10; i++)
		if(root->next[i])
            del(root->next[i]);
    delete(root);
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--){
        root = new node;
        int n;
        scanf("%d",&n);
        for(int i = 1; i <= n; i++){
            scanf("%s",str[i]);
            buildtrie(str[i]);
        }
        int flag = 1;
        for(int i = 1; i <= n; i++){
            if(findtrie(str[i])){
                flag = 0;
                break;
            }
        }
        if(flag)
            printf("YES\n");
        else
            printf("NO\n");
        del(root);
    }
    return 0;
}


AC代码(静态申请空间):

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

char str[10005][15];
int cnt_node;

struct node
{
    int cnt;
    struct node *next[10];
    void init()
    {
        cnt = 0;
        memset(next,0,sizeof(next));
    }
}Heap[100005];

inline node* new_node(){
    Heap[cnt_node].init();
    return &Heap[cnt_node++];
}

node *root = NULL;

void buildtrie(char *s)
{
    node *p = root;
    node *tmp = NULL;
    int i,l = strlen(s);
    for(i = 0; i < l; i++)
    {
        if(p->next[s[i]-'0'] == NULL)
        {
            tmp = new_node();
            p->next[s[i]-'0'] = tmp;
        }
        p = p->next[s[i]-'0'];
        p->cnt++;
    }
}

bool findtrie(char *s)
{
    node *p = root;
    int i,l = strlen(s);
    for(i = 0; i < l; i++)
        p = p->next[s[i]-'0'];
    if(p->cnt != 1)
        return true;
    return false;
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--){
        cnt_node = 0;
        root = new_node();
        int n;
        scanf("%d",&n);
        for(int i = 1; i <= n; i++){
            scanf("%s",str[i]);
            buildtrie(str[i]);
        }
        int flag = 1;
        for(int i = 1; i <= n; i++){
            if(findtrie(str[i])){
                flag = 0;
                break;
            }
        }
        if(flag)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}


C#利用S7netplus实现西门子S7_200_SMART PLC高效点位监控与操作 本文详细介绍了如何使用C#结合S7netplus开源库高效监控与操作西门子S7-200 SMART PLC的点位。内容涵盖从开发环境搭建、建立通信连接,到核心的点位读写、批量数据处理及字节与位数组转换等关键技术,并提供了构建稳定监控程序的架构与避坑指南,帮助开发者快速实现上位机与PLC的稳定数据交互。 阅读详情

相关推荐

Raid5损坏两块盘

  以下为浪潮Inspur NF5460M4型号服务器故障处理过程: 设备raid5组损坏两块硬,并raid组处理离线状态,情况如图:     由于硬盘数据比较重要,面对此情况不要慌我们尽量做到安全保守的保证数据尽可能完整,以下为处理方法,(遇raid5两块盘出现问题处理方法)   以下截图均为遇相同问题的解决图案,并非现场截图。 Ctrl+H 进WebBios界面,发现两...

chen_lipeng的博客 2万+

HDU-1671-Phone List(字典树)

Problem DescriptionGiven a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let’s say the phone catalogue listed these numbers: 1. Emergency 9

long-long-ago 716

嵌入式Linux Qt/QML开发实战:从Buildroot配置到应用部署

本文详细介绍了嵌入式Linux Qt/QML开发全流程,从Buildroot系统配置、交叉编译工具链搭建到应用部署与调试。以RK3506开发板为例,提供实战指南,帮助开发者高效完成嵌入式应用开发,解决常见环境配置与性能优化问题。

m2n3o4p5的博客 224

poj 3630 / hdu 1671 Phone List 【Trie字典树 动态创建&静态创建】

Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25160   Accepted: 7641 Description Given a list of phone numbers, determine if it is consistent

Fighting! 2366

Anylabeling与SAM协同:从智能标注到YOLO数据集构建的完整实践

本文详细介绍了Anylabeling与SAM协同标注的完整实践,从智能标注到YOLO数据集构建的全流程。通过结合SAM的自动分割能力和Anylabeling的交互式标注,显著提升标注效率,特别适合小样本、复杂形状和多类别标注场景。文章还提供了环境搭建、标注优化技巧以及YOLO格式转换的实用指南。

weixin_26873711的博客 460

airodump-ng、aircrack-ng使用教程

wifi破解、airodump-ng、aircrack-ng脚本

ssmbyss的博客 2231

POJ3630/HDU-1671 Phone List,字典树静态建树!

Phone List POJ动态建树TLE了~~~ 题意:拨打某个电话时可能会因为和其他电话号码的前几位重复而导致错误,现在给出一张电话单,求是否有某个电话是其他电话的前缀。是则输出NO,否则输出YES。 思路:字典树模板题了,但有一个动态建树每次都要清空内存这个很重要,很容易导致MLE了。这个题插入和查找可以放在一起,这便是字典树的强大之处。 struct T...

weixin_30594001的博客 151

即插即用篇 | 手把手教你 YOLOv11 添加注意力机制 | 适用于【检测任务】【分类任务】【分割任务】【关键点任务】| 20+ 种全打通!

即插即用篇 | 手把手教你 YOLOv11 添加注意力机制 | 适用于【检测任务】【分类任务】【分割任务】【关键点任务】| 20+ 种全打通!

Coding... 2830

HDU1671 POJ3630 Phone List Tire树

题目大意:给你n个长度小于10的电话号码,让你判断是否存在一个号码是其他号码的前缀,若存在,输出NO,否则输出YES。 分析:大量数据查询短字符串,一看就是Tire树的题。把n个号码存入之后,遍历查询这n个号码,如果存在某一个号码所对应的节点的num值大于1,那么就说明该组号码有不止一个这样的前缀,即:存在一个号码是其他号码的前缀,跳出循环输出结果即可;如果所有节点的num值都不大于1,

AC_Gibson的专栏 593

Spring Security 珍藏版快速入门

文章目录一、前期配置二、Spring Security 测试三、案例:自定义页面(XML配置用户信息)三、案例:自定义页面(数据库存储用户信息) 一、前期配置 (1)pom.xml <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>${s

南淮北安的博客 633

【微服务】SpringBoot 对接飞书审批流程使用详解

SpringBoot 对接飞书审批流程使用详解

congge_study的博客 3769

HDU 1671 & POJ 3630 Phone List(字典树基础题)

这个题目竟然卡内存........每次处理之前都要把字典树释放掉......... #include #include #include using namespace std; struct trie { trie * next[15]; int flag; trie() { memset(next,0,sizeof(next));

Paradiser 1107

SAP_SD模块信用管理-最早未清项判断逾期

在 SAP SD 模块的信用管理(Credit Management) 中,系统可以通过 最早未清项(Oldest Open Item) 来判断客户是否存在逾期,从而影响订单的信用检查结果。例如: 定义最大未清项目%为1%,未清天数为1天,即允许客户“逾期1天的未清应收帐款/该客户的应收帐款余额”最大比例为1%,若超过1%则将被信用冻结。的信用检查功能,用于判断客户是否有账龄过长的未清款项,并据此决定是否允许新的销售订单继续处理。然后在查看客户的信贷信息可以看到,最早的未清信息显示在系统中。

我小时候很黑的博客 861

POJ 3630 , HDU 1671 Phone List - from lanshui_Yang

这道题也是一道找前缀的问题,很自然地要用到Trie树,但是如果用动态Trie树(即用指针开辟内存)的话,虽然在HDU上可以过(可能是HDU的数据比较水),但在POJ上会TLE , 所以这道题只能用静态Trie树。        实现过程如下: #include #include #include #include #include #include #include #define mem(a

lanshui_Yang的专栏 1261

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

POJ 3630 && HDU 1671 Phone list(静态字典树)

HDU 1671 POJ 3630 静态字典树,动态会超时 方案一,结构体静态字典树,不排序,在插入时判断 #include <stdio.h> #define MAX 10 typedef struct TrieNode { int nEndFlag; //标记该字符是否是某一字符串的结尾 struct TrieNode *n...

aocang4831的博客 165

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Phone List(POJ-3630 and HDU-1671)(动态数组与静态数组)

题目链接: http://poj.org/problem?id=3630 http://acm.hdu.edu.cn/showproblem.php?pid=1671 Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 30683   Accepted:

殇星痕的博客 403

ZOJ2876 POJ3630 HDU1671 Phone List,静态Trie树

这题用Trie数来解决。如果用动态的话,malloc,new和delete这些肯定会超时,所以只能用静态数。判断条件优化一下,可以把时间将到100ms以内,ZOJ上70ms刷到第一页。。。记得静态数组开大一点,10000个号码每个号码10位,开100000最保险了。

Neo Fung的专栏 1199

POJ3630 Phone List+字典数三种申请内存的方法--动态、静态、半动态

POJ3630 Phone List+字典数三种动态和静态申请内存的方法

sin_XF的专栏 714

HDU 1671 Phone List && POJ 3630 Phone List

题目链接~~>                     #include #include #include using namespace std ; #define LEN sizeof(struct node) int n ; bool flag ; struct node { int count ; struct node *next[10] ; }

Muti-Agent 1834

HDU 1671 POJ 3630 Phone List

HDU1671 Phone List 传送门 POJ3630 Phone List 传送门 题目大意:给你一些数字,看是否有相同前缀,有则输出NO,否则输出YES。(注意这里的数字可能有前导0,所以建议用字符串做) 典型的trie树 这里简单介绍一下trie树trie树就是把字符串建成树的形式。 如有字符串 abcds abcf edfg 先建立一个根节点,这个根节点一般不包含任何信

(⊙o ⊙) 2214

HDU 1671 && POJ 3630 Phone List (Trie树 好题)

HDU 1671 && POJ 3630 Phone List (Trie树 好题)

Tc的专栏 1265

HDU_1671 POJ_3630 Phone List 【字典树】

题目链接 题目描述给定一个电话号码列表,确定它是否一致,意思是没有数字是另一个的前缀。如果有输出NO,否则输出YES解题思路字典树求前缀问题,但这里要注意,可能一个电话号码是这个字符之前的前缀也可能是这个字符之后的后缀。在插入字符的同时来判断该字符是否可以构成前缀即可。 HDU这道题如果动态分配字典树不清除会内存超限。在POJ中动态分配内存时间还会超时。所以需要静态分配内存。从中知道了动态分配内存

Learning Deep Learning 611

HDU 1617 HDU 3630 Phone List(字典树)

Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16341   Accepted: 5228 Description Given a list of phone numbers, determine if it is consistent ...

weixin_34150503的博客 140

Phone List(hdu1671字典树)

题意:找单词中看是否存在一个单词是另一个的前缀,静态建树 思路:字典树 单词存在前缀有两种 1.abc存在,我们要查找abcd,那样只要找标记即可,即前缀已经存在。 2.abcd存在,我们要找abc,那样就是插入的单词的结尾在字典树中是存在的,即前缀不存在 所以在插入过程中就判断前缀是否存在 #include #include #include using namespace std;

leonharetd的专栏 656

字典树题目整合

HDU1251-统计难题: 最简单的字典树题,对于字典中的字符串插入后依次回答询问子串个数即可。 解题报告 HDU1305-Immediate Decodability: 这题要求的是对于一个字典是否满足其中任何一个字符串都不是另一个字符串的子串,所以插入所有串后枚举每个串,看是否所有的串都符合子串个数为1(自身是自身的子串)即可。 HDU

hao_zong_yin的博客 983
上一篇: POJ 2349 Arctic Network
下一篇: Codeforces Round #317 (Div. 2) (572A Arrays,572B Order Book)
yphacker
博客等级 码龄12年 199粉丝 540原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值