题意:问在一个词典里,那些单词是复合词,即哪些单词是由两个单词拼出来的。


渣渣代码:(Accepted, 30ms)

//UVa10391 - Compound Words
#include<iostream>
#include<string>
#include<set>
using namespace std;
set<string> dic;
int main()
{
//freopen("in.txt", "r", stdin);
string w;
while (cin >> w) dic.insert(w);
for (const auto &r : dic) {
int s = r.size();
for (int i = 1;i < s;++i) {
if (dic.count(r.substr(0, i)) && dic.count(r.substr(i, s - i))) {
cout << r << '\n';
break;
}
}
}
return 0;
}

分析:遍历两遍词典找出两个单词来找/判断复合词肯定不行,慢死了,肯定只能是拆当前单词拆成两部分,枚举所有可拆分的情况,看这两部分有没有找到两个独立的单词。于是用了如上面的超简单的方法,但是30ms。学习他们的0ms至10ms的做法,发现他们都用了hash。我不知道什么是hash,一下子看他们代码也看的一愣一愣的。看了一下午代码和hash资料了,累死了。。明天继续改进这题,今天我要歇息下了。明天再会更新此博客。

更新:对hash还不熟,但是自己做了一下,但是总是Runtime error!我要哭了,自己做了N组不同的测试数据,没有任何异常,但是提交总是RE!为什么啊!!!!:

垃圾代码:(Runtime Error, –)

//UVa10391 - Compound Words
#include<cstdio>
#include<cstring>
const int mdic = 120200, d[] = { 4616,177,7 };
char dic[mdic][40]; int hash(char* s) {
int re = 0;
for (int i = 0;s[i] && i < 3;++i)
re = (s[i] - 'a')*d[i];
return re;
}
bool find(char* s) {
int h = hash(s);
while (strcmp(s, dic[h]) > 0) ++h;
if (strcmp(s, dic[h])) return 0;
return 1;
} int main()
{
freopen("in.txt", "r", stdin);
memset(*dic, 0, sizeof(*dic));
char w[40], (*p)[40] = dic;
while (scanf("%s", w) != -1) {
int h = hash(w);
while (dic[h][0]) ++h;
strcpy(dic[h], w);
}
for (int I = 0;I < mdic;++I, ++p) {
if (!*p) continue;
int len = strlen(*p);
for (int i = 1;i < len;++i) {
char a[40], b[40];
strncpy(a, *p, i);a[i] = 0;
strcpy(b, *p + i);
if (find(a) && find(b)) printf("%s\n", *p);
}
}
return 0;
}

分析:尽量按照自己的想法做的。对于获得hash那个函数,我也是自己想的(4616=120010/26,177=120010/26/26,7=120010/26/26/26),不知道高人有什么看法。还有再次声明:这个代码是RE的!!我测试了好多数据都没问题,一到oj上就RE。。好歹来个WA啊啊啊(哇的一声就哭了)

就我自己的测试数据,上面的版本用时2136,下面的4726。。。。怎么还慢了。。不服。。以后学精了再说吧。

[刷题]算法竞赛入门经典(第2版) 5-5/UVa10391 - Compound Words的更多相关文章

  1. [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...

  2. [刷题]算法竞赛入门经典(第2版) 5-15/UVa12333 - Revenge of Fibonacci

    题意:在前100000个Fibonacci(以下简称F)数字里,能否在这100000个F里找出以某些数字作为开头的F.要求找出下标最小的.没找到输出-1. 代码:(Accepted,0.250s) / ...

  3. [刷题]算法竞赛入门经典(第2版) 5-13/UVa822 - Queue and A

    题意:模拟客服MM,一共有N种话题,每个客服MM支持处理其中的i个(i < N),处理的话题还有优先级.为了简化流程方便出题,设每个话题都是每隔m分钟来咨询一次.现知道每个话题前来咨询的时间.间 ...

  4. [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1590 - IP Networks #include<iost ...

  5. [刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation

    题意:模拟Petri网的执行.虽然没听说过Petri网,但是题目描述的很清晰. 代码:(Accepted,0.210s) //UVa804 - Petri Net Simulation //Accep ...

  6. [刷题]算法竞赛入门经典(第2版) 6-6/UVa12166 - Equilibrium Mobile

    题意:二叉树代表使得平衡天平,修改最少值使之平衡. 代码:(Accepted,0.030s) //UVa12166 - Equilibrium Mobile //Accepted 0.030s //# ...

  7. [刷题]算法竞赛入门经典(第2版) 6-1/UVa673 6-2/UVa712 6-3/UVa536

    这三题比较简单,只放代码了. 题目:6-1 UVa673 - Parentheses Balance //UVa673 - Parentheses Balance //Accepted 0.000s ...

  8. [刷题]算法竞赛入门经典(第2版) 5-16/UVa212 - Use of Hospital Facilities

    题意:模拟患者做手术. 其条件为:医院有Nop个手术室.准备手术室要Mop分钟,另有Nre个恢复用的床.准备每张床要Mre分钟,早上Ts点整医院开张,从手术室手术完毕转移到回复床要Mtr分钟.现在医院 ...

  9. [刷题]算法竞赛入门经典(第2版) 5-11/UVa12504 - Updating a Dictionary

    题意:对比新老字典的区别:内容多了.少了还是修改了. 代码:(Accepted,0.000s) //UVa12504 - Updating a Dictionary //#define _XieNao ...

随机推荐

  1. 译:Missing index DMV的 bug可能会使你失去理智---慎重看待缺失索引DMV中的信息

    注: 本文译自https://www.sqlskills.com/blogs/paul/missing-index-dmvs-bug-that-could-cost-your-sanity/ 原文作者 ...

  2. Java基础—JDK环境变量配置

    1.安装JDK 下载网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 注意点 ...

  3. Linux环境下的IDE,极大提升编程效率

    "一个真正的程序员是不用IDE(译者注:集成开发环境)的,他们都是用带着某某插件的文本编辑器来写代码."我们总能在某些地方听到此类观点.然 而,尽管越来越多的人同意这样的观点,但是 ...

  4. CentOs6系统安装及前期为安装Cdh4准备

    问题1: 虚拟机工具:VMware Workstation 前提:虚拟机安装使用64位操作系统时涉及到一个CPU虚拟化的问题,如果BIOS没有开启CPU的虚拟化选项,创建和打开64位虚拟机就会报错. ...

  5. Java并发编程:如何创建进程?

    转载自:http://www.cnblogs.com/dolphin0520/p/3913517.html 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程 ...

  6. WPF 截屏软件开发

    最近由于工程需要开始研发基于Windows的自动录屏软件,很多细节很多功能需要处理,毕竟一个完美的录屏软件不是你随随便便就可以写出来的.首先参考了大部分的录屏软件,在研发的过程中遇到了很多的问题:比如 ...

  7. select下拉二级联动

    function opt(){ var id = $("#ids").val(); $.ajax({   type: "POST",  url: "$ ...

  8. FineUIMvc

    FineUIMvc 在线示例源代码下载(包含上面列出的全部 50 种主题,基础版可以免费使用) FineUIMvc 在线示例 FineUI 官网首页

  9. ios 苹果手机硬件摘要

    IPhone4 * 2010年发布. * A4单核处理器. * 3.5英寸Retina显示屏(视网膜屏幕),960x640像素分辨率. * 后置摄像头500万像素. * 前置摄像头30万像素. IPh ...

  10. Go语言及Web框架Beego环境

    Go语言及Web框架Beego环境无脑搭建 [原]Go语言及Web框架Beego环境无脑搭建 本文涉及软件均以截至到2013年10月12日的最新版本为准 1. 相关软件准备: 1) go1.2rc1. ...