本文主要是介绍508 - Morse Mismatches (UVA),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接如下:
Online Judge
这道题我觉得题意有点问题,它写“If multiple context words match morse perfectly, then select the matching word with the fewest characters.”,但按这个题意写的代码无法AC,只能选择最先perfectly match的那个词。
AC代码如下:
#include <cstdio>
#include <string>
#include <map>
#include <vector>
#include <string.h>
#include <algorithm>
#include <iostream>
const int INF = 10000;int pivot, minGap, pivotGap;
std::vector<std::string> word, strVec;
char ch[11];
std::string s;
std::map<char, std::string> mp;
bool flag;int calGap(std::string a, std::string b){for(int i = 0; i < std::min(a.size(), b.size()); ++i){if(a[i] != b[i]){return INF;}}return std::max(a.size(), b.size()) - std::min(a.size(), b.size());
}int main(){while(scanf("%s", ch) == 1 && ch[0] != '*'){std::cin >> s;mp[ch[0]] = s;}while(scanf("%s", ch) == 1 && ch[0] != '*'){std::string str;for(int i = 0; i < strlen(ch); ++i){str += mp[ch[i]];}word.push_back(ch);strVec.push_back(str);}while(std::cin >> s && s != "*"){bool exclamation = false;flag = false;minGap = INF;for(int i = 0; i < strVec.size(); ++i){if(strVec[i] == s){if(!flag){pivot = i;flag = true;} else{exclamation = true;}} else{int tmp = calGap(s, strVec[i]);if(tmp < minGap){minGap = tmp;pivotGap = i;}}}if(flag){printf("%s%s\n", word[pivot].c_str(), exclamation ? "!" : "");} else{printf("%s?\n", word[pivotGap].c_str());}}return 0;
}
这篇关于508 - Morse Mismatches (UVA)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!