UVA10391复合词
题意:
给定一个词典,然后问里面那些是复合词,复合词就是当前这个单词正好是有两个单词拼接而成。
思路:
用map来标记是否出现过,然后先按长短排序,把每个单体拆分成任意两个可能的单词(每次拆分的时间可以是O(1)的),然后在看看这两个单词是否在之前出现过,如果都出现过就直接把当前单词放到答案数组里,然后记得break不然有可能当前单词可能有多重组合而成,失误把当前单词多记录了几次,最后在按照字典序sort答案数组就行了,题目没有给单词长度,我们设为ll,那么时间复杂度是:O(n*ll*log(n))目测ll不是很大。
#include<map>
#include<string>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct
{
char str[105];
}S;
S ss[120005] ,Ans[120005];
map<string ,int>mark;
bool camp(S a ,S b)
{
return strlen(a.str) < strlen(b.str);
}
bool camp2(S a ,S b)
{
return strcmp(a.str ,b.str) < 0;
}
int main ()
{
int i ,l;
mark.clear();
int nowid = 0;
while(~scanf("%s" ,ss[++nowid].str));
sort(ss + 1 ,ss + nowid + 1 ,camp);
int ansid = 0;
for(int ii = 1 ;ii <= nowid ;ii ++)
{
mark[ss[ii].str] = 1;
l = strlen(ss[ii].str);
if(l == 1) continue;
for(i = 1 ;i <= l - 1 ;i ++)
{
int s = 0;
char tmp = ss[ii].str[i];
ss[ii].str[i] = '\0';
if(mark[ss[ii].str]) s ++;
ss[ii].str[i] = tmp;
if(s&&mark[ss[ii].str+i])
{
Ans[++ansid] = ss[ii];
break;
}
}
}
sort(Ans + 1 ,Ans + ansid + 1 ,camp2);
for(i = 1 ;i <= ansid ;i ++)
puts(Ans[i].str);
return 0;
}
UVA10391复合词的更多相关文章
- 复合词UVa10391(STL简单应用)
一.题目 输入一系列由小写字母组成的单词.输入已按照字典序排序(这句话就是个陷阱),且不超过120000个.找出所有的复合词,即恰好由两个单词连接而成的单词. 二.解题思路 要么枚举两两拼接的情况,O ...
- 算法习题---5-5复合词(UVa10391)
一:题目 输入一系列由小写字母组成的单词.输入已按照字典序排序,且不超过120000个.找出所有的复合词,即恰好由两个单词连接而成的单词 (一)样例输入 a alien born less lien ...
- [刷题]算法竞赛入门经典(第2版) 5-5/UVa10391 - Compound Words
题意:问在一个词典里,那些单词是复合词,即哪些单词是由两个单词拼出来的. 渣渣代码:(Accepted, 30ms) //UVa10391 - Compound Words #include<i ...
- 复合词 (Compund Word,UVa 10391)
题目描述: 题目思路: 用map保存所有单词赋键值1,拆分单词,用map检查是否都为1,即为复合词 #include <iostream> #include <string> ...
- UVA-10391(字符串检索)
题意: 给定一个字典,要求找出所有的复合词; 思路: 用map把词都存起来,再把词拆开看是否是出现过的单词; AC代码: #include <bits/stdc++.h> #include ...
- 复合词(Compound Words, UVa 10391)(stl set)
You are to find all the two-word compound words in a dictionary. A two-word compound word is a word i ...
- 【习题5-5 UVA-10391】Compound Words
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举每一个串的分割点. 看看左右两个串在不在字符串中即可. [代码] #include <bits/stdc++.h> ...
- UVA-10391 Compoud Words
You are to find all the two-word compound words in a dictionary. A two-word compound word is a word ...
- JavaScript 中的变量命名方法
三种命名方法 在程序语言中,通常使用的变量命名方法有三种:骆驼命名法(CamelCase),帕斯卡命名法(PascalCase)和匈牙利命名法. 依靠单词的大小写拼写复合词的做法,叫做"骆驼 ...
随机推荐
- 漏洞复现-ActiveMq任意文件写入漏洞(CVE-2016-3088)
0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场) 0x01 影响版本 未禁用PUT.MOVE等高危方法的ActiveM ...
- Hi3359AV100 NNIE开发(1)-RFCN demo LoadModel函数与参数解析
之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3359AV100 NNIE开发(1)-RFCN demo LoadModel函数与参数解析,通过对LoadModel函数的解析,能够很好理解. ...
- Webpack 基石 tapable 揭秘
Webpack 基于 tapable 构建了其复杂庞大的流程管理系统,基于 tapable 的架构不仅解耦了流程节点和流程的具体实现,还保证了 Webpack 强大的扩展能力:学习掌握tapable, ...
- numpy函数的使用
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 数据分析三剑客:Numpy,Pandas ...
- [SDOI2009] HH的项链(待续)
[SDOI2009] HH的项链(待续) 题目大意:对一个由若干个数字(可重复)组成的数列,询问\([l,r]\)中出现的不同的数字数量 考试时(考试时范围小)用的暴力,but,没有考虑数字0的情况, ...
- Servlet原理解析&使用指南
Servlet(Server Applet)全称Java Servlet,是用Java编写的服务器端程序.广义上指任何实现了Server接口的类,主要功能在于交互式地浏览和生成数据,生成动态Web内容 ...
- 基于Docker的MindSpore安装与使用基础介绍
技术背景 MindSpore是一款新一代AI开源计算框架,其特色在于:创新编程范式,AI科学家和工程师更易使用,便于开放式创新:该计算框架可满足终端.边缘计算.云全场景需求,能更好保护数据隐私:可开源 ...
- P2260 [清华集训2012]模积和 【整除分块】
一.题目 P2260 [清华集训2012]模积和 二.分析 参考文章:click here 具体的公式推导可以看参考文章.博主的证明很详细. 自己在写的时候问题不在公式推导,公式还是能够比较顺利的推导 ...
- MyBatis简单的CRUD操作
Dao接口 package com.ttpfx.dao; import com.ttpfx.domain.User; import java.util.List; public interface U ...
- UML和设计模式原则总结
UML总结: uml就是统一建模语言,包括语义概念 标记符号和指南 具有静态 动态 环境上的和组织性的部分 .它不是编程语言.uml预览它涉及的主要领域有结构性(静态视图,用例视图,构件图,实现视图, ...