POJ3630Phone List(字典树)

本文介绍了一种使用Trie树解决电话号码前缀匹配问题的方法。通过建立Trie树来存储电话号码,并检查每个号码是否为其他号码的前缀。代码实现了Trie树的初始化、插入及搜索功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考http://s.acmore.net/show_article/show/58

以附上代码

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<string.h>
 4 #include<map>
 5 #include<vector>
 6 #include<set>
 7 #include<stack>
 8 #include<queue>
 9 #include<algorithm>
10 #include<stdlib.h>
11 using namespace std;
12 #define Max(a,b) (a > b ? a : b)
13 #define Min(a,b) (a < b ? a : b)
14   
15 int Trie[500000][10];
16 int val[100000];
17 int S = 1;
18 int idx(char c) {return c - '0';}
19   
20 void init()
21 {
22     S = 1;
23     memset(Trie,0,sizeof(Trie));
24     memset(val,-1,sizeof(val));
25 }
26   
27 int search_insert(char* s)
28 {
29     int u = 0;
30     int n = strlen(s);
31     for(int i = 0; i < n; i++)
32     {
33         int c = idx(s[i]);
34         if(!Trie[u][c])
35         {//这个结点不存在,插入
36             Trie[u][c] = S;
37             val[u] = 0;//标记这个结点是单词结点
38             u = S;
39             S++;//结点加1
40         }
41         else if(Trie[u][c] && val[u] == 0)
42         {//如果这个结点存在,而且是单词结点,那么就往下走
43             u = Trie[u][c];
44             if(val[u] == 1)
45             {//当下一个结点是单词的结束时,直接返回false,表示存在前缀。
46                 return 0;
47             }
48         }
49         else if(val[u] == 1)
50         {
51             return 0;
52         }
53     }
54     if(val[u] == 1 || val[u] == 0)
55     {//检测是不是有前缀
56         return 0;
57     }
58     else
59     {//设置新单词的结尾标记
60         val[u] = 1;
61     }
62     return 1;
63 }
64   
65 int main()
66 {
67     //freopen("in.txt","r",stdin);
68     int t,n;
69     char a[100000];
70     scanf("%d",&t);
71     while(t--)
72     {
73         int flag = 1;
74         init();
75         scanf("%d",&n);
76         while(n--)
77         {
78             scanf("%s",a);
79             if(!search_insert(a))
80             {
81                 flag = 0;
82             }
83         }
84         if(flag)
85         {
86             printf("YES\n");
87         }
88         else
89         {
90             printf("NO\n");
91         }
92     }
93     return 0;
94 }

 

转载于:https://www.cnblogs.com/gj-Acit/p/3145042.html

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值