简单的字典树 模拟一遍。。
/*
字典树
构造字典树。
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<queue>
#include<map>
#include<stack>
#include<set>
#include<math.h>
using namespace std;
typedef long long int64;
//typedef __int64 int64;
typedef pair<int64,int64> PII;
#define MP(a,b) make_pair((a),(b))
const int maxn = 53;
const int maxm = 100005;
const int inf = 0x7fffffff;
const double pi=acos(-1.0);
const double eps = 1e-8;
int a[ maxm ];
struct tree{
tree* next[ maxn ];
//bool lev;
};
tree root;
int tot;
int getval(char mod[],char aim)
{
int i;
for(i=0;mod[i];i++)
{
if(mod[i]==aim)return i;
}
return -1;
}
int getval(char s[])
{
char value[15]="A234567891JQK";
char suit[10]="CDHS";
int a=getval(value,s[0]);
int len=strlen(s);
int b=getval(suit,s[len-1]);
return a*4+b;
}
void init(){
tot = 0;
for( int i=0;i<maxn;i++ )
root.next[i] = NULL;
//printf("AC=%d\n",getval("AC"));
//printf("AC=%d\n",getval("AD"));
//printf("AC=%d\n",getval("AH"));
//printf("AC=%d\n",getval("AS"));
//printf("KS=%d\n",getval("KS"));
}
void build( int n ){
tree *p = &root;
tree *tmp;
for( int i=1;i<=n;i++ ){
if( p->next[ a[i] ]==NULL ){
tmp = ( tree* )malloc( sizeof( root ) );
//tmp->lev = true;
for( int j=0;j<maxn;j++ ){
tmp->next[j] = NULL;
}
p->next[ a[i] ] = tmp;
p = p->next[ a[i] ];
tot++;
}
else{
p = p->next[ a[i] ];
}
}
return ;
}
int main(){
int m;
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
while( scanf("%d",&m)&&m>0 ){
int n;
init();
char tmp[ 12 ];
for( int i=1;i<=m;i++ ){
scanf("%d",&n);
//printf("i=%d\n",i);
for( int j=n;j>=1;j-- ){
scanf("%s",tmp);
a[ j ] = getval(tmp);
}
//for( int j=1;j<=n;j++ )
//printf("%d ",a[j]);
//printf("\n");
build( n );
}
printf("%d\n",tot);
//delete(&root);
}
return 0;
}
分享到:
相关推荐
标题中的“字典树练习 POJ 1056”是指一个编程问题,源自编程竞赛网站POJ(Programming Online Judge)的题目1056。POJ是一个在线平台,程序员可以在这里提交代码并测试其正确性,以解决给定的问题。这类问题通常...
标题中的“使用字典树和Hashtable两种方法解POJ 2503”是指通过这两种数据结构解决一个特定的编程问题。POJ是Programming Online Judge的缩写,它是一个在线的编程竞赛平台,用户可以提交代码来解决特定的算法问题。...
ACM算法讲解 本文将对ACM主要算法进行讲解,涵盖了基本算法、图算法、数据结构、搜索、计算几何学、动态规划和综合题等多方面的知识点。... + 字典树 + 后缀数组、后缀树 + 块状链表 + 哈夫曼树
- **解释**:Trie树(字典树)是一种用于存储和检索字符串的高效数据结构。 ### 三、动态规划 #### 1. 基本动态规划 - **例题**:poj2488, poj3083, poj3009, poj1321, poj2251 - **解释**:基本动态规划问题通常...
POJ 2564是一道经典的字符串处理题目,涉及到动态规划(DP)与字典树(Trie Tree)的综合运用。题目要求通过一系列编辑操作将一个字符串转换为另一个字符串,每一步编辑操作可以是插入、删除或替换一个字符,并且要...
【标题】"POJ2513-Colored Sticks【TrieTree+MergeSet+EulerPath】"涉及的是一道编程竞赛题目,主要考察参赛者的数据结构与算法应用能力,特别是Trie树(字典树)、并查集(MergeSet)以及欧拉路径(Euler Path)这...
6. **字典树(Trie)**: - (poj2513):一种高效的字符串检索数据结构。 ### 四、状态压缩 1. **状态压缩动态规划**: - (poj1837, poj1276):通过位运算来压缩状态,从而减少内存占用。 2. **背包问题**: - ...
3. **POJ1951**:可能与字符串的排序有关,比如可以运用Manacher's Algorithm解决最长回文子串问题,或者需要理解并实现Trie(字典树)数据结构以优化字符串查找。 4. **POJ2003**:这可能是一个关于字符串编辑距离...
KMP算法用于在文本中查找模式字符串,AC自动机则适用于构建字符串匹配的字典树。例如,题目poj1961和poj2406就是KMP算法的应用实例。 ### 7. 几何算法 几何算法涉及点、线、面的性质和关系,如凸包、最近点对、...
今天我们要探讨的是一个名为"POJ2525-Text Formalization"的问题,它涉及到一种高效的数据结构——Trie树(也称为前缀树或字典树)。这个题目来源于北京大学的在线判题系统POJ,旨在考察程序员对字符串处理和Trie树...
#### 字典树 (Trie) - **题目示例**: - POJ 2513:Trie树的基本构造与查询。 ### 编程技巧 #### C++模板应用 - **题目示例**: - POJ 3096、POJ 3007:模板函数与类的灵活使用。 #### 特殊数据结构 - **题目...
- 字典树(Trie)的构建与查询。 - 字符串哈希的应用。 #### 3. 图论题 图论问题是算法竞赛中的重要组成部分,包括图的遍历、最短路径、最小生成树等问题。 - **知识点**: - 图的表示方法:邻接矩阵、邻接表。 -...
9. **字典构建与搜索**:为了实现拼写检查,可能需要创建一个高效的字典结构,如Trie树或哈希表,以便快速查找和比较单词。 10. **性能优化**:在竞赛环境中,程序的运行速度也很关键,因此可能需要优化代码,使其...
2. **高级数据结构**:哈希表、堆(最大堆和最小堆)、 Trie 字典树、B树和B+树等。 3. **字符串处理**:模式匹配(KMP、Boyer-Moore、Rabin-Karp等)、字符串操作(子串查找、字符串比较等)。 4. **数学应用**:...
- **内容**: 字典树是一种高效的数据结构,主要用于存储字符串集合。 - **示例题目**: poj2513 - **知识点**: - **字典树的特点**:节省空间;查询速度快;方便实现自动补全功能。 #### 4. 哈希表 - **内容**: ...
可以通过构建字典树或哈希表等方式来高效解决。 ##### 5. 棋盘分割 棋盘分割问题通常涉及将一个棋盘分割成若干个小区域,要求每个小区域满足一定的条件。可以通过动态规划定义状态`dp[i][j]`表示分割到第`i`行第`j...
在编程实践中,我们可以采用动态规划、贪心、分治等算法思想,结合数据结构如哈希表、Trie树、字典树等来提高效率。此外,利用已有的自然语言处理库,如NLTK、spaCy等,也可以简化某些步骤的实现。 总的来说,POJ...
这道题目主要涉及数据结构与算法的知识,特别是字符串处理和字典树(Trie)的应用。下面将详细阐述这个问题的背景、解题思路以及AC(Accepted)代码的关键部分。 ### 题目背景 在奶牛的世界里,它们也有自己的语言...
ACMer 需要掌握的算法讲解 本资源摘要信息涵盖了 ACM 主要算法的介绍,包括基本算法、图算法、数据结构、搜索、计算几何学、动态规划、综合题等方面的...12. 字典树 13. 后缀数组、后缀树 14. 块状链表 15. 哈夫曼树
- 字典树是一种高效的数据结构,用于存储大量字符串。 - 示例题目:poj2513 4. **哈希表** - **散列表的应用**:常用于快速查找、插入和删除操作。 - 示例题目:poj3349, poj3274, POJ2151, poj1840, poj2002, ...