cojs 173. 词链

★☆   输入文件:link.in   输出文件:link.out   简单对比
时间限制:1 s   内存限制:128 MB

【问题描述】
给定一个仅包含小写字母的英文单词表,其中每个单词最多包含 50 个字母。

如果一张由一个词或多个词组成的表中,每个单词(除了最后一个)都是排在它后面的单词的前缀,则称此表为一个词链。例如下面的单词组成了一个词链:


int 
integer

而下面的单词不组成词链:

integer 
intern

请在给定的单词表中取出一些词,组成最长的词链。最长的词链就是包含单词数最多的词链。

数据保证给定的单词表中,单词互不相同,并且单词按字典顺序排列。

【输入格式】

第一行一个整数 n ,表示单词表中单词数。

下接 n 行每行一个单词。

【输出格式】

一个整数,表示最长词链长度。

【输入输出样例】 
输入:
link.in
5
i
int
integer
intern
internet

输出:
link.out
4

【数据范围】

50% 的数据, n<=1000

100% 的数据, n<=10000

#include<iostream>
using namespace std;
#include<cstdio>
#include<cstring>
#define N 10100
int n;
int ans=0;
int topt=0;
#define L 51
struct Trie{
int nxt[26];
int cnt;
}trie[L];
void dfs(int k,int pre_ans)
{
for(int i=0;i<26;++i)
if(trie[k].nxt[i])
{
dfs(trie[k].nxt[i],pre_ans+trie[k].cnt); //在树的一条边上深搜,看一条边上最多的标示符是出现了几次,这就是最长的链表
}
ans=max(pre_ans+trie[k].cnt,ans); //取大
}
void build(char *str)//建立一个单词的树
{
int now=0;
while(*str)
{
if(!trie[now].nxt[*str-'a']) //now储存当前在第几行,str指针指向单词的第0~strlen(s)个元素,nxt[0~25]代表a,b,c……x,y,z在本行有没有出现过
// 如果没有的话就建立一棵新树,有的话就继续往下走
trie[now].nxt[*str-'a']=++topt;
now=trie[now].nxt[*str-'a'];
str++;
}
trie[now].cnt++; //只在单词的末尾加一个标识符
}
void input()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
char s[L];
scanf("%s",s);
build(s);
}
dfs(0,0);
printf("%d\n",ans);
}
int main()
{
freopen("link.in","r",stdin);
// freopen("link.out","w",stdout);
input();
// fclose(stdin);fclose(stdout);
return 0;
}

  

day 1——字典树练习的更多相关文章

  1. 萌新笔记——用KMP算法与Trie字典树实现屏蔽敏感词(UTF-8编码)

    前几天写好了字典,又刚好重温了KMP算法,恰逢遇到朋友吐槽最近被和谐的词越来越多了,于是突发奇想,想要自己实现一下敏感词屏蔽. 基本敏感词的屏蔽说起来很简单,只要把字符串中的敏感词替换成"* ...

  2. [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)

    Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...

  3. 字典树+博弈 CF 455B A Lot of Games(接龙游戏)

    题目链接 题意: A和B轮流在建造一个字,每次添加一个字符,要求是给定的n个串的某一个的前缀,不能添加字符的人输掉游戏,输掉的人先手下一轮的游戏.问A先手,经过k轮游戏,最后胜利的人是谁. 思路: 很 ...

  4. 萌新笔记——C++里创建 Trie字典树(中文词典)(一)(插入、遍历)

    萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...

  5. 山东第一届省赛1001 Phone Number(字典树)

    Phone Number Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 We know that if a phone numb ...

  6. 字典树 - A Poet Computer

    The ACM team is working on an AI project called (Eih Eye Three) that allows computers to write poems ...

  7. trie字典树详解及应用

    原文链接    http://www.cnblogs.com/freewater/archive/2012/09/11/2680480.html Trie树详解及其应用   一.知识简介        ...

  8. HDU1671 字典树

    Phone List Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. *HDU1251 字典树

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  10. LA 3942 - Remember the Word (字典树 + dp)

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

随机推荐

  1. unittest自动化使用HTMLTestRunner的中文编码问题

    1.使用unittest自动化测试框架,使用HTMLTestRunner生成测试报告,中文乱码问题! 如图 2.解决方法: 第一步:先在自己的测试脚本中添加 import sys reload(sys ...

  2. Alpha第二天

    Alpha第二天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...

  3. c字符数组

    一.PTA实验作业 题目1:统计一行文本的单词个数 1. 本题PTA提交列表 2. 设计思路 定义一个长度为1000的字符数组str[1000] 在定义 i=0,cnt=0:cnt用来记录单词的个数 ...

  4. C语言——第六周作业

    题目 题目一:高速公路超速处罚 1.实验代码 #include <stdio.h> int main() { int speed,maxspeed; double x; scanf(&qu ...

  5. vim配置之taglist插件安装

    上次说了不带插件的vim配置,今天补充两个,来日方长,不定期更新: 首先看一个路径: 下载ctags,将其中的ctags.exe复制到上边目录下边: 地址:https://sourceforge.ne ...

  6. js日常积累

    1.数组转字符串 str.join(',') 2.字符串转数组 arr.split(',') 3.数组排序 function sorb(a,b){return a-b;}; arr.sort(sorb ...

  7. 使用Spark MLlib进行情感分析

    使用Spark MLlib进行情感分析             使用Spark MLlib进行情感分析 一.实验说明 在当今这个互联网时代,人们对于各种事情的舆论观点都散布在各种社交网络平台或新闻提要 ...

  8. Packet for query is too large (84 > -1).

    windows下的resin配置连接mysql,常用的安全的做法是将数据库信息配置到conf目录下的resin.xml文件中. 因为resin连接mysql不是必须的,所以resin本身没有提供mys ...

  9. IntelliJ IDEA插件——冷门神器分享

    IntelliJ IDEA就不必介绍了,至今还能保持IDE前三的神器,如今java程序员的首选,今天介绍几款冷门但绝对是神器的IDEA插件. 前言 IDEA自不必说,IDEA插件是开发中必备的神器,相 ...

  10. 码农、黑客和2B程序员之间的区别

    码农: 黑客: 2B程序员: 求2的32次方: 码农: System.out.println(Math.pow(2, 32)); 黑客: System.out.println(1L<<32 ...