hdu1247Hat’s Words (组合单词,字典树+DFS)

2024-05-12 20:58

本文主要是介绍hdu1247Hat’s Words (组合单词,字典树+DFS),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Problem Description
A hat’s word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary. You are to find all the hat’s words in a dictionary.

Input
Standard input consists of a number of lowercase words, one per line, in alphabetical order. There will be no more than 50,000 words. Only one case.

Output
Your output should contain all the hat’s words, one per line, in alphabetical order.

Sample Input
  
a ahat hat hatword hziee word

Sample Output
  
ahat hatword
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct nn
{int flag;struct nn *next[26];
}node;
typedef struct strin
{int len,indx;char str[105];
}String;
int cmp(String s1,String s2)
{return s1.len<s2.len;
}
int cmp1(String s1,String s2)
{return s1.indx<s2.indx;
}
node *builde()
{node *p=new node;p->flag=0;for(int i=0;i<26;i++)p->next[i]=NULL;return p;
}
node *root;
void insert(char s[])
{node *p=root;for(int i=0;s[i]!='\0';i++){if(p->next[s[i]-'a']==NULL)p->next[s[i]-'a']=builde();p=p->next[s[i]-'a'];}p->flag=1;
}
String s[50005];
int flog;
void dfs(int k,int si,int num)
{node *p=root;if(num>2)return ;if(si==s[k].len){if(num==2)flog=1; return ;}for(int j=si;j<s[k].len;j++){if(p->next[s[k].str[j]-'a']==NULL)return ;p=p->next[s[k].str[j]-'a'];if(p->flag){dfs(k,j+1,num+1); if(flog!=0) return ;}}
}
int main()
{int n=0,m=0;while(scanf("%s",s[n].str)>0&&s[n].str[0]!='#'){s[n].len=strlen(s[n].str); s[n].indx=n; n++;}sort(s,s+n,cmp);root=builde();for(int i=0;i<n;i++){flog=0; dfs(i,0,0);if(flog==1)s[m++]=s[i];insert(s[i].str);}sort(s,s+m,cmp1);for(int i=0;i<m;i++)printf("%s\n",s[i].str);
}


这篇关于hdu1247Hat’s Words (组合单词,字典树+DFS)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/983715

相关文章

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

Python 字典 (Dictionary)使用详解

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

hdu4869(逆元+求组合数)

//输入n,m,n表示翻牌的次数,m表示牌的数目,求经过n次操作后共有几种状态#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#includ