[HDOJ1247]Hat’s Words

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1247

Hat’s Words

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 10982    Accepted Submission(s): 3937

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

在所有单词中找被其他两个单词表示的单词,全部丢到字典树里维护,暴力枚举每个单词,再将每个单词「芙兰达」判断是否在字典树中维护即可。注意如果找到符合情况的要及时跳出内层的枚举。

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <iostream>
 6 #include <cmath>
 7 #include <queue>
 8 #include <map>
 9 #include <stack>
10 #include <list>
11 #include <vector>
12
13 using namespace std;
14
15 char str[66666][81];
16
17 typedef struct Node {
18     Node *next[26];
19     int cnt;
20     Node() {
21         cnt = 0;
22         for(int i = 0; i < 26; i++) {
23             next[i] = NULL;
24         }
25     }
26 }Node;
27
28 void insert(Node *p, char *str) {
29     for(int i = 0; str[i]; i++) {
30         int t = str[i] - ‘a‘;
31         if(p->next[t] == NULL) {
32             p->next[t] = new Node();
33         }
34         p = p->next[t];
35     }
36     p->cnt++;   //is a word
37 }
38
39 int find(Node *p, char *str) {
40     for(int i = 0; str[i]; i++) {
41         int t = str[i] - ‘a‘;
42         p = p->next[t];
43         if(!p) {
44             return 0;
45         }
46     }
47     if(p->cnt >= 1) {
48         return 1;
49     }
50     return 0;
51     // return p->cnt;
52 }
53
54 int main() {
55     int n = 0;
56     Node *root = new Node();
57     // freopen("in", "r", stdin);
58     while(gets(str[n]) && strlen(str[n])) {
59         insert(root, str[n]);
60         n++;
61     }
62     char a[81];
63     char b[81];
64     for(int i = 0; i < n; i++) {
65         int len = strlen(str[i]);
66         for(int j = 1; j < len; j++) {
67             memset(a, 0, sizeof(a));
68             memset(b, 0, sizeof(b));
69             strncpy(a, str[i], j);
70             strncpy(b, str[i] + j, len - j);
71             if(find(root, a) && find(root, b)) {
72                 printf("%s\n", str[i]);
73                 break;
74             }
75         }
76     }
77     return 0;
78 }
时间: 2024-10-10 01:16:59

[HDOJ1247]Hat’s Words的相关文章

Linux red hat 安装ansible

今日对Linux 系统是Red Hat Enterprise Linux Server release 6.5 (Santiago)对ansible进行安装. 由于系统的源为yum源,所以使用yum install ansible 进行安装,但是报错.如图.(这个错误是yum源没有注册到red hat 系统). yum源不能安装,所以换了一个思路.使用pip安装.pip是依赖python安装的. 1.检查Python版本 Python -v 检查出来为Python 2.6.6 2.检查pip 版

在VMware中为Redhat HAT配置本地yum源

在VMware中为Redhat HAT配置本地yum源 今天准备使用CM安装大数据环境,到需要几台机器都使用同一套yum源才可以,所以想到将Redhat镜像文件拷贝到虚拟机中,在挂起使用,最后通过http分享给其他虚拟机.后再想想,这样做真的很愚蠢,首先在虚拟机安装的时候我已经挂起过一次镜像啦,所以我只要在每个虚拟机中再挂起一下,直接配置yum源就可以,也不用将iso拷贝到虚拟机中,减少磁盘占用.所以现在就来说说怎么做: 一.安装前检查,首先需要确保你的虚拟机已经加载了本地镜像,如下图所示: 注

hdu 1247 Hat’s Words(map)

Hat's Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8527    Accepted Submission(s): 3069 Problem Description A hat's word is a word in the dictionary that is the concatenation of exactl

Linux(Red Hat 6 32位) 下安装Mysql5.6.30

1. 下载MySQL 5.6 下载页面:http://dev.mysql.com/downloads/mysql/ 此处选择"Red Hat Enterprise Linux 6 / Oracle Linux 6 (x86, 32-bit), RPM Bundle"下载,下载至/root/fuxian/目录下,下载文件名为"MySQL-5.6.30-1.el6.i686.rpm-bundle.tar" 2. 解压tar包 cd /fuxian/Downloads/

System center 2012 R2 实战七、SCOM2012R2监控Red hat Linux5.7

1    准备工具 u  putty_V0.63.0.0.43510830.exe ------>用于连接到Linux服务器 u  Winscp  ------>用于将windows与 Linux服务器文件互传 2    操作步骤 复制代理至Linux服务器 在SCOM安装光盘中,找到Linux服务器代理 打开Wincap工具,将用于Linux服务器的SCOM代理,复制到Linux服务器根目录下 1            域名解析配置 u  修改Linux服务器主机名称+DNS后缀 u  去D

Red Hat Enterprise Linux 5.10在vmware10下的安装

Red Hat Enterprise Linux 5.10在vmware10下的安装 1.启动"新建虚拟机"向导程序.如下图,选择"自定义",点击"下一步" 2.选择虚拟机硬件兼容性,你可以根据自己需求选择,这里选择默认,如下图.单击"下一步" 3.指定虚拟机系统的安装方式.选择"稍后安装操作系统",如果选择"安装盘镜像文件(iso)",虚拟机启动后会自动执行快速安装,不方便用户控制安装

Configure Red Hat Enterprise Linux shared disk cluster for SQL Server

下面一步一步介绍一下如何在Red Hat Enterprise Linux系统上为SQL Server配置共享磁盘集群(Shared Disk Cluster)及其相关使用(仅供测试学习之用,基础篇) 一.      创建共享磁盘和 Cluster 微软官方配置文档:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure. Linux Cluster结构

SQL Server on Red Hat Enterprise Linux

本文从零开始一步一步介绍如何在Red Hat Enterprise Linux上搭建SQL Server 2017,包括安装系统.安装SQL等相关步骤和方法(仅供测试学习之用,基础篇). 一.   创建RHEL系统(Create Red Hat Enterprise Linux System) 1.      前提准备 由于本文主要研究SQL Server 2017在Linux上的搭建方法,从Install SQL Server on Linux中得知当前SQL Server 2017 CTP

Configure Red Hat Enterprise Linux shared disk cluster for SQL Server——RHEL上的“类”SQL Server Cluster功能

下面一步一步介绍一下如何在Red Hat Enterprise Linux系统上为SQL Server配置共享磁盘集群(Shared Disk Cluster)及其相关使用(仅供测试学习之用,基础篇) 一.      创建共享磁盘和 Cluster 微软官方配置文档:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-shared-disk-cluster-red-hat-7-configure. Linux Cluster结构