复合词(Compound Words, UVa 10391)
给出一个词典,找出所有的复合词,即恰好有两个单词连接而成的单词。输入每行都是
一个由小写字母组成的单词。输入已按照字典序从小到大排序,且不超过120000个单词。输
出所有复合词,按照字典序从小到大排列。
题目很好 理解 用好久没字典树了,写了很多坑
要注意:
自己和自己也可以组成一个
比如 a aa aa是可以输出的
#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;#define S s[i] - 'a'
#define mem(a,b) memset(a,b,sizeof(a))
const int maxd = 120005;
struct node
{bool is_word;node *next[26];node():is_word(false) {for(int i = 0;i<26;i++){this->next[i] = NULL;}}
};
void ins(node *Root,char *s)
{node *p = Root;int i = 0;for(;s[i];i++){if(p->next[S] == NULL){p->next[S] = new node();}p = p->next[S];// printf("%c",s[i]);}p->is_word = true;// printf("\n");
}
bool find_is(node *Root ,char *s)
{node *p = Root;int i,top=0;stack<int>v;for(int i = 0;s[i]!='\0';i++){if(p->is_word)v.push(i);p = p->next[S];}while(!v.empty()){int i = v.top();p = Root;v.pop();for(;s[i]!='\0'&&p;i++){p = p->next[S];}if(s[i] == '\0'&&p&&p->is_word)return true;}return false;
}char word[maxd][30];
int main(void)
{
// freopen("input.in","r",stdin);
// freopen("output.out","w",stdout);node *root = new node();register int cnt = 0;while(scanf("%s",word[cnt])!=EOF)ins(root,word[cnt++]);for(int i = 0;i<cnt;i++){if(find_is(root,word[i])){puts(word[i]);}}
}
vj上偷的最短AC代码 开o2优化应该也是 0ms 0k
复合词(Compound Words, UVa 10391)相关推荐
- 15行代码AC——习题5-5 复合词(Compound Words, UVa 10391)——解题报告
励志用少的代码做高效的表达 题目(提交)链接→UVA-10391 本题实质是#include<string>头文件的substr()字符串分割函数与#include<algorith ...
- Compound Words UVA - 10391(c++用法中substr函数用法+map实现)
题意: 给出字典中一堆单词,单词的输入方式是以字典序输入的.问:在这一堆单词中,有那些单词是通过其它两个单词组合而来的.按字典序升序输出这些单词. 题目: You are to find all th ...
- UVa 10391 Compound Words(复合词)
题意 输出所有输入单词中可以由另两个单词的组成的词 STL set的应用 枚举每个单词的所有可能拆分情况 看拆开的两个单词是否都存在 都存在的就可以输出了 #include <bits/ ...
- uva 10391 Compound Words
哈希 题意简短:单case,输入一列单词即一个字典,已经按字典序排好输入,上限为120000,然后要你找一些单词,这种单词可以分为两部分,两部分都是字典里面的单词,按字典序输出这种单词 很裸的哈希,对 ...
- UVA 10391 - Compound Words
链结:戳我. TLE...看来是Hash Table做的不够好. View Code 1 /* 2 Author: frankdj 3 State: TLE 4 */ 5 #include <i ...
- 算法竞赛入门经典 第二版 习题5-5 复合词 Compound Words uva10391
题目:https://vjudge.net/problem/UVA-10391 思路:用vector存下单词,因为单词已按字典序排列于是复合词前半个单词一定在这个复合词之前,于是遍历寻找在首字母更变之 ...
- 复合词 (Compound Words)(集合+字符函数)
题目描述 给出一个词典,找出所有的复合词,即恰好有两个单词连接而成的单词.输入每行都是一个小写字母组成的单词.输入已按照字典序从小到大排序,且不超过120000个单词.输出所有复合词,按照字典序从小到 ...
- UVA 10391 STL容器的使用
这道题目,我是用了2个set(s1,s2)容器,s1用来盛放所有的字符串,然后遍历s1,把每个字符串拆成2部分,再判断s1里是否均含有这2部分,如果有就加入到s2容器里,因为它要求按照字典序输出,se ...
- python redis 性能测试台_Redis性能测试
Redis 性能测试 Redis 性能测试是通过同时执行多个命令实现的.Redis性能测试主要是通过src文件夹下的redis-benchmark来实现(Linux系统下) 语法 redis 性能测试 ...
最新文章
- 大数据驱动的运营创新和探索
- POJ_3268_Sliver Cow Party结题报告
- Oracle学习:视图与索引
- 状态机 python_Python状态机设计
- leetcode - 813. 最大平均值和的分组
- 在eclipse中运行正常的java项目放到tomcat中报错的解决办法
- 自动查询成绩的小玩意
- sed命令在文件头部插入文本---BSD和GNU版本通用写法
- android 过滤ip,EditText Android过滤器的IP地址###。###。###。###?
- 12306数据库遭泄露,请尽快修改密码
- 文献中数学公式规范复制工具——Mathpix Snip
- 线粒体和叶绿体的基因组特点_线粒体和叶绿体基因组的组织及表达解析.ppt
- 尝试关闭阿里云ESC的阿里云盾相关服务
- YOLOv4论文解读
- heic(HEIF)格式图像处理(一)
- 广告sdk是什么意思?广告SDK分类及用途介绍
- checkra1n u盘越狱 linux,苹果实用技巧:Windows通过使用Linux U盘进行checkra1n越狱教程...
- 【愚公系列】2022年08月 微信小程序-左划删除效果实现
- matlab怎么选择高频变压器,高频变压器的建模与仿真定.doc
- 华为mate30epro支不支持鸿蒙,听我一句劝,华为手机可以支持,但这4款不要买