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


渣渣代码:(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. SBT使用阿里云Maven仓库,解决SBT下载依赖慢。

    添加:~/.sbt/repositories 文件 文件内容: [repositories] local my-maven-repo: http://maven.aliyun.com/nexus/co ...

  2. Struts2之Validator

    Struts2中提供了数据校验验证数据例如验证邮件.数字等.验证方式有3种:一是通过validate()方法,二是通过Xml,三是使用注解方式. 一.初始化 首先定义一个User类 package c ...

  3. CI框架剖析一

            CodeIgniter 是一个小巧但功能强大的 PHP 框架,作为一个简单而"优雅"的工具包,它可以为开发者们建立功能完善的 Web 应用程序.本人使用CI框架有一 ...

  4. centos 6.5 搭建ftp服务器

    linux下一般使用vsftpd作为ftp服务器. vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序.特点是小巧轻快,安全易用. 下面是安装配置步骤: 1.安装vsftpd yum i ...

  5. 【转】AS3画板工具类,可直接套用

    原文链接:http://bbs.9ria.com/thread-212711-1-16.html 今天项目需求做一个画板,要有橡皮擦.自己懒不想写,在网上搜了半天都是习作,没有拿来就能用的又不爱看.只 ...

  6. 原生js实现tab切换

    //通过原生js实现table切换<html><head><meta http-equiv="Content-Type" content=" ...

  7. MySQL存储过程--带参数报错1064

    DELIMITER $$ USE `student`$$ DROP PROCEDURE IF EXISTS `sync_student`$$ CREATE DEFINER=`student`@`%` ...

  8. python scrapy 抓取脚本之家文章(scrapy 入门使用简介)

    老早之前就听说过python的scrapy.这是一个分布式爬虫的框架,可以让你轻松写出高性能的分布式异步爬虫.使用框架的最大好处当然就是不同重复造轮子了,因为有很多东西框架当中都有了,直接拿过来使用就 ...

  9. redis 压缩链表

    redis 压缩链表 概述 压缩链表是相对于普通链表而言的 当普通链表的数据越来越多, 链表查询性能会低效 当存储的数据较少时, 使用链表存储会浪费空间 压缩链表本质上是一个字符串 压缩链表内存储的数 ...

  10. ADO.NET 获取SQL SERVER数据库架构信息

    1.确定可用字段数目 sqlDataReader类提供了FieldCount属性,可确定查询反悔了多少个字段. 2.确定返回行的数目 sqlDataReader中没有指示可用行的属性. 3.确定字段的 ...