[刷题]算法竞赛入门经典(第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 ...
随机推荐
- sass ruby环境 安装配置,使用sublime text3 中sass
首先,你想要使用sass的话,就必须依赖于ruby环境.所以,你要下一个ruby.具体的链接应该是(http://rubyinstaller.org/downloads).下载相应的版本.- 下载好之 ...
- web浏览器上传超大文件插件
如今基于浏览器安装插件的时代已经过时,让人觉得比较low,基于非插件的文件上传大都有限制,给大家推荐一款插件,基于大文件切割原理上传的插件,解决大家的难题! 项目链接http://www.twinkl ...
- response.getWriter().write()与out.print()的区别(转)
1.首先介绍write()和print()方法的区别: (1).write():仅支持输出字符类型数据,字符.字符数组.字符串等 (2).print():可以将各种类型(包括Object)的数据通 ...
- shell是什么,各种shell的初步认识,适用于初学者
shell是什么?有什么用处?怎么用?我相信,这是大部分人刚接触到shell都有过的疑问.下面小编为大家讲解一下自己的讲解,希望能对大家有所帮助. 什么是shell? shell就是系统内核的一层壳, ...
- 老李分享:Android性能优化之内存泄漏2
这种创建Handler的方式会造成内存泄漏,由于mHandler是Handler的非静态匿名内部类的实例,所以它持有外部类Activity的引用,我们知道消息队列是在一个Looper线程中不断轮询处理 ...
- Oracle DBA管理包脚本系列(二)
该系列脚本结合日常工作,方便DBA做数据管理.迁移.同步等功能,以下为该系列的脚本,按照功能划分不同的包.功能有如下: 1)数据库对象管理(添加.修改.删除.禁用/启用.编译.去重复.闪回.文件读写. ...
- Jmeter函数组件开发
插件开发方法有两种: 一.在jmeter官网下载jmeter源码,在源码里面新加函数,然后导出jar: 二.不下载源码,直接导入jmeter相应的jar包,即可开发.(推荐) 下面介绍第二种开发方法: ...
- asp.net core源码飘香:从Hosting开始
知识点: 1.Kestrel服务器启动并处理Http请求的过程. 2.Startup的作用. 源码飘香: 总结: asp.net core将web开发拆分为多个独立的组件,大多以http中间件的形式添 ...
- 云计算之路-阿里云上:数据库连接数过万的真相,从阿里云RDS到微软.NET Core
在昨天的博文中,我们坚持认为数据库连接数过万是阿里云RDS的问题,但后来阿里云提供了当时的数据库连接情况,让我们动摇了自己的想法. 帐户 连接数 A 4077 B 3995 C 741 D 698 E ...
- C# 遍历泛型集合
/// <summary> /// 遍历泛型 /// </summary> /// <typeparam name="T"></typep ...