[刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO
代码:(Accepted,10 ms)
//UVa508 - Morse Mismatches
#include<iostream>
#include<string>
#include<map>
using namespace std;
map<char, string> morse;
map<string, string> word;
string wo, tran, result;
char c;
int cmp(string a, string b) {
if (a == b) return 0;
if (a.size() > b.size()) a.swap(b);
if (a == b.substr(0, a.size())) return b.size() - a.size();
return 666;
}
int main()
{
//freopen("in.txt", "r", stdin);
//ios::sync_with_stdio(false);
while ((cin >> c) && c != '*') cin >> morse[c];
while ((cin >> wo) && wo[0] != '*') {
auto cp = wo.begin();
tran = morse[*cp];
while (++cp != wo.end())
tran += morse[*cp];
word[wo] = tran;
}
while ((cin >> tran) && tran[0] != '*') {
result.clear();
int min = 888;
for (auto i = word.begin();i != word.end();++i) {
if (i->second == tran)//精确寻找
if (!result.size() || *result.rbegin() == '?') result = i->first;
else { result += "!";break; }
else if (!result.size() || *result.rbegin() == '?') {//模糊寻找
int n = cmp(tran, i->second);
if (n<min) min = n, result = i->first + "?";
}
}
cout << result << '\n';
}
return 0;
}
分析:思路是先根据电报代码表把单词全部转换成代码,单词和其代码存在一个map里,然后一个个检测下面的码的匹配。精确匹配不用说,如果只找到一个,直接输出,找到多个的话还是只输出第一个,但加一个“!”;模糊匹配是检索每个单词的代码,看哪一串缺的最多出来的代码最少
/*
看VJ上好些0ms的,但我又想不出来什么更好的算法。想过会不会是循环的问题,于是试过将精确寻找和模糊寻找分开循环,结果还是10ms。就想到应该又是流的速度太慢导致。就加了一句ios::sync_with_stdio(false);关了stdio同步,果然变0ms了。唉好吧。。不过想了想不必太较真,博客里使用的还是没关同步的版本。
不用map也可以做的,map似乎还自带排序来着?我也是第一次用map,一开始做没用map,后来想试试看map,就改了。不过改成map后好像有些问题,主要是针对char[]字符串,因为char[]不可以用=来赋值,只能用strcpy()函数,而用这个函数给map赋值报错了,编译通不过,捣鼓半天不知道怎么改,就改用string了,慢一点但是方便。
好几天没刷题了,整个人懒洋洋的,脑子使不出劲,这题写了好久。。主要还是那win10那破一周年更新,导致显卡驱动不正常,折腾了好几天,题目落下了。虽然作为一个win10脑残粉,甚至在考虑要不要回win7.
*/
[刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches的更多相关文章
- [刷题]算法竞赛入门经典(第2版) 5-15/UVa12333 - Revenge of Fibonacci
题意:在前100000个Fibonacci(以下简称F)数字里,能否在这100000个F里找出以某些数字作为开头的F.要求找出下标最小的.没找到输出-1. 代码:(Accepted,0.250s) / ...
- [刷题]算法竞赛入门经典(第2版) 5-13/UVa822 - Queue and A
题意:模拟客服MM,一共有N种话题,每个客服MM支持处理其中的i个(i < N),处理的话题还有优先级.为了简化流程方便出题,设每个话题都是每隔m分钟来咨询一次.现知道每个话题前来咨询的时间.间 ...
- [刷题]算法竞赛入门经典(第2版) 4-5/UVa1590 - IP Networks
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa1590 - IP Networks #include<iost ...
- [刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation
题意:模拟Petri网的执行.虽然没听说过Petri网,但是题目描述的很清晰. 代码:(Accepted,0.210s) //UVa804 - Petri Net Simulation //Accep ...
- [刷题]算法竞赛入门经典(第2版) 6-6/UVa12166 - Equilibrium Mobile
题意:二叉树代表使得平衡天平,修改最少值使之平衡. 代码:(Accepted,0.030s) //UVa12166 - Equilibrium Mobile //Accepted 0.030s //# ...
- [刷题]算法竞赛入门经典(第2版) 6-1/UVa673 6-2/UVa712 6-3/UVa536
这三题比较简单,只放代码了. 题目:6-1 UVa673 - Parentheses Balance //UVa673 - Parentheses Balance //Accepted 0.000s ...
- [刷题]算法竞赛入门经典(第2版) 5-16/UVa212 - Use of Hospital Facilities
题意:模拟患者做手术. 其条件为:医院有Nop个手术室.准备手术室要Mop分钟,另有Nre个恢复用的床.准备每张床要Mre分钟,早上Ts点整医院开张,从手术室手术完毕转移到回复床要Mtr分钟.现在医院 ...
- [刷题]算法竞赛入门经典(第2版) 5-11/UVa12504 - Updating a Dictionary
题意:对比新老字典的区别:内容多了.少了还是修改了. 代码:(Accepted,0.000s) //UVa12504 - Updating a Dictionary //#define _XieNao ...
- [刷题]算法竞赛入门经典(第2版) 5-10/UVa1597 - Searching the Web
题意:不难理解,照搬题意的解法. 代码:(Accepted,0.190s) //UVa1597 - Searching the Web //#define _XIENAOBAN_ #include&l ...
随机推荐
- 为什么你应该抛弃Express的视图渲染引擎
Nodejs Express框架的一个被人们广为使用的特性是它的渲染引擎.Express视图渲染引擎允许Controller提供一个视图名称和视图模型对象给Express,然后返回由HTTP响应流输出 ...
- Windows 10 Creaters Update 新功能——画中画模式和窗口高斯模糊
在Windows 10 Creaters Update中,可以给窗口设置高斯模糊了,只要几行代码! <Grid Loaded="Grid_Loaded"> <Gr ...
- Spark踩坑记——共享变量
[TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...
- JSR330: DI
JSR330 DI JSR 330 ,提供了一种可重用的.可维护.可测试的方式来获取Java对象.也称为Dependency Injection . DI应该都不陌生,因为它就是Spring core ...
- instance 网卡是如何被拉起来的?- 每天5分钟玩转 OpenStack(172)
instance 的网卡是如何被配置并拉起的?这是理解和用好 cloud-init 非常关键的一步.我们先讨论一个最简单基础的场景:镜像中没有安装 cloud-init. 此时 instance 启动 ...
- Linux命令速查大全
常用基本命令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir 创建目录 -p 创建目录,若无父目录,则创建p(par ...
- Linux之shell编程函数使用
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 原文和作者一起讨论:http://www.cnblogs.com/int ...
- Script error.全面解析
一些用户向我们反馈,Fundebug的[JavaScript](https://docs.fundebug.com/notifier/javascript/)监控插件抓到了很多**Script err ...
- Redis基础学习(五)—Redis的主从复制
一.概述 Redis的主从复制策略是通过其持久化的rdb文件来实现的,其过程是先dump出rdb文件,将rdb文件全量传输给slave,然后再将dump后的操作实时同步到slave中.让从服务 ...
- TableView cell自适应高度-----xib
1.通过xib创建一个cell,将label进行上左下右,进行适配, self.automaticallyAdjustsScrollViewInsets = NO; self.edgesForExte ...