uva508 莫尔斯电码(Morse Mismatches)
- 首先我理解错了题意,在这篇文章找到了UVa 508 Morse Mismatches(莫尔斯电码)
这题的意思是给定一些莫尔斯编码,给定一些已知字典,给定一些编码,求解这些编码的对应原文,如果可以精确匹配,则直接输出原单词,如果有多个可精确匹配的结果,则输出匹配结果里字典序最小的单词(紫书上说输出任意一个,这是错误的)并在末位加上“!”;如果无法精确匹配,则可以在编码的末尾增加或删除一些字符后匹配单词(增删应尽量小,就是找到增删最少的模糊匹配),无论增删后匹配一个还是多个,最后都要加上“?”,如果有多个模糊匹配结果(增删数相等),则输出字典序最小的匹配结果;如果无精确匹配也无模糊匹配结果,则输出整个给定字典里字典序最小的那个单词。 - 其次我把数组设得太小 char word[12],不过在调试过程中学到了很多东西,倒是错得值得。下面列出
- strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
std::ios::sync_with_stdio(false);
原来而cin,cout之所以效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段语句可以来打消iostream的输入输出缓存,可以节省许多时间,使效率与scanf与printf相差无几,还有应注意的是scanf与printf使用的头文件应是stdio.h而不是iostream。
我沒有使用这句。
// uva508.cpp
#include <stdio.h>
#include <string.h>
#include <algorithm>
char table[40][10];
struct context {char word[20]; // 12 is too smallchar code[100];bool operator < (const context y) const {return strcmp(word, y.word) < 0;}
} words[110];int main(){char c; memset(table, '\0', sizeof(table));for(;;){scanf("%s", &c); // %c will input the '\n', result in endless loopif (c == '*') break;if (c >= 'A' && c <= 'Z') scanf("%s", table[c - 'A']);else scanf("%s", table[c - '0' + 26]);}int n_words = 0;memset(words, '\0', sizeof(words));for (;;){scanf("%s", words[n_words].word);if (words[n_words].word[0] == '*') break; // okint len = strlen(words[n_words].word);for (int i = 0; i < len; i++){char word = words[n_words].word[i]; // translate the word to morse codeint q; if (word >= 'A' && word <= 'Z') q = word - 'A';else q = word - '0' + 26;strcat(words[n_words].code, table[q]);}n_words++;}std::sort(words, words + n_words);char str[81];for (;;){scanf("%s", str);if (str[0] == '*') break;int p_word = 0, diff = 81, num = 0, len_str = strlen(str);for (int i = 0; i < n_words; i++){int len_code = strlen(words[i].code);if (len_str <= len_code){if (strstr(words[i].code, str) == words[i].code){if (len_code - len_str < diff){p_word = i;diff = len_code - len_str;num = 1;}else if (len_code - len_str == diff) num++;}}else {if (strstr(str, words[i].code) == str){if (len_str - len_code < diff){p_word = i;diff = len_str - len_code;num = 1;}else if (len_str - len_code == diff) num++;}}}printf("%s", words[p_word].word);if (diff == 0 && num > 1) putchar('!');else if (diff != 0 ) putchar('?');putchar('\n');}return 0;
}
uva508 莫尔斯电码(Morse Mismatches)相关推荐
- UVA-508 莫尔斯电码 题解答案代码 算法竞赛入门经典第二版
https://github.com/jzplp/aoapc-UVA-Answer 这个题目就是在考验英语水平呀!(或者题目本身也写的不清楚) 尤其是多个完全匹配(!)和模糊匹配(?)的情况,我题意看 ...
- 习题4-6 莫尔斯电码 UVa508
算法竞赛入门经典(第2版)第4章 函数和递归 习题4-6 莫尔斯电码 UVa508 感悟. 1.阅读书中题目,从网站下载英文原题,重点在看输入输出数据与格式. 2.英文的阅读量还是比较大的,莫尔斯电 ...
- 设计一个莫尔斯电码电报机
//设计一个电报机 //要导入的包 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.Action ...
- [AHK]将字符转换成莫尔斯电码
这个程序可以在记事本中使用.当用户按下空格键时,程序会获取当前选中的文本,并将其转换为莫尔斯电码播放出来.如果用户选中的文本包含非摩尔斯电码字符,程序会自动忽略它们. 将字符转换成莫尔斯电码 ; 这个 ...
- 莫尔斯电码对照表_使用莫尔斯电码编码纯文本
莫尔斯电码对照表 This began as a thought experiment while waiting for patches to install on my system. 这是在等待 ...
- Escape/Unescape,HTML实体编码,敲击码(Tap code),摩尔斯电码(Morse Code)
1.Escape/Unescape 加密解码/编码解码,又叫%u编码,采用UTF-16BE模式, Escape编码/加密,就是字符对应UTF-16 16进制表示方式前面加%u.Unescape解码/解 ...
- 树莓派作品2_莫尔斯电码
一.创意来源 莫尔斯电码历史悠久,我从小时候就听说过莫尔斯电码了伟大了,不过直至今日我都没有机会过过手瘾,亲手用莫尔斯电码来输出一些有意义的句子. 不过有了树莓派,一切都不成问题,只要两个按钮,就能帮 ...
- java morse电码,摩斯电码morse code软件下载-摩斯电码morse code手机版下载v3.80 安卓版-2265安卓网...
摩斯电码morse code手机版是一款主要研究摩斯密码的软件,用户可以通过软件帮助进行学习,学习更多的摩斯密语的相关知识!软件还提供有相关的监测功能,帮助用户了解的自己学习的现状!感兴趣的用户快来2 ...
- 莫尔斯电码(Python)
莫尔斯电码采用了短脉冲和长脉冲 (分别为点和点划线) 来编码字母和数字. 例如,字母"A"是点划线,"B"是点划线点点.如文件 Mos.txt 文件所示. A ...
最新文章
- RetinaFace,最强开源人脸检测算法
- 怎么修剪_夹竹桃怎么养?这样“修剪”一下,一年开3、4次花,花大色艳
- 阿里钉钉,马云旗下的又一个千亿美金产品?
- ASP.NET Web API 记录请求响应数据到日志的一个方法
- HTML5常用标签及特殊字符表
- 机器学习 --- 2. 从最大似然再看线性回归(转)
- 企业申请CMMI3-CMMI5必经的六个阶段
- 【Linux系统压力测试】【内存压测】【CPU压测】【磁盘空间压测】
- FPGA零基础学习:按键控制LED
- J.K.罗琳 哈佛大学毕业演讲
- 《高效能青少年的七个习惯》读后感作文3700字
- 【前端】在Vue2中使用Vanta.js炫酷动态背景(全屏背景)
- 电视剧旗舰剧情分集大结局
- Unity简单使用Job System
- 大数据----机器学习---神经网络
- 为什么数据线连接电脑只能充电
- 【网络教程】如何删除微软云Microsoft Azure绑定的信用卡(解绑信用卡)
- 使用C++编写一个可视化窗口
- python实现打印模板映射
- 多态的向上转型与向下转型