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


渣渣代码:(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. 【iOS】7.4 定位服务->3.2 地图框架MapKit 功能2:路线规划(导航)

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...

  2. 【2017-04-01】JS字符串的操作、时间日期的操作、函数、事件、动画基础

    一.字符串的操作 1.转大写: s.toLowerCase(); 2.转大写: s.toUpperCase(); 3.字符串的截取: s.substr(3,4);      -从索引3开始截取,截取4 ...

  3. 老李分享:持续集成学好jenkins之Git和Maven配置 2

    8.检查代码更新并编译 可以通过Poll SCM来设置定时检查编译功能 比如*/5 * * * * 就是每隔5分钟检查一次,如果git仓库中有更新,则执行build操作. 9.使用Maven私服加快下 ...

  4. 操作系统之cache、伙伴系统、内存碎片、段式页式存储管理

    存储管理是操作系统非常重要的功能之一,本文主要介绍操作系统存储管理的基础知识,包括缓存相关知识.连续内存分配.伙伴系统.非连续内存分配.内存碎片等,并结合linux系统对这些知识进行简单的验证.文章内 ...

  5. (iOS)开发中收集的小方法

    1.颜色转变成图片 - (UIImage *)createImageWithColor:(UIColor *)color {     CGRect rect = CGRectMake(0.0f, 0. ...

  6. JavaScript高级程序设计---学习笔记(三)

    函数表达式 定义函数的方式有两种:一种是函数声明,另一种是函数表达式. 关于函数声明,它的一个重要特征就是函数声明提升,意思是在执行代码之前会先读取函数声明所以可以把函数声明放在调用它的语句后面. 而 ...

  7. 浅析 Jndi / DataSource / ConnectionPool 三者

    最近有个用户量 5W-10W 的 web 应用,频繁导致 weblogic 崩溃,让运维组很难受. 通过几天跟踪系统日志和 weblogic 运行状况,发现报错的姿势有很多,其中对定位问题比较关键的报 ...

  8. Ubuntu 重装 mysql

    我另篇blog有提到修改完my.cnf文件后mysql server重新启动失败,就是说mysql server启动不起来了,于是我就想到重装再试试,没想到就好了. 重装mysql之前需要卸载干净,删 ...

  9. swfupload多图上传插件(ASP.NET)

    <script src="../js/swfupload/swfupload.js" type="text/javascript"></scr ...

  10. CF #93 div1 B. Password KMP/Z

    题目链接:http://codeforces.com/problemset/problem/126/B 大意:给一个字符串,问最长的既是前缀又是后缀又是中缀(这里指在内部出现)的子串. 我自己的做法是 ...