some programs
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
#include <cassert>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
using namespace std;
|
||||
|
||||
vector<string> words;
|
||||
|
||||
string deleted_char(const string& word, const int idx) {
|
||||
assert(0 <= idx && idx < word.size());
|
||||
return word.substr(0, idx) + word.substr(idx + 1);
|
||||
}
|
||||
|
||||
vector<string> query(const string& s) {
|
||||
vector<string> results;
|
||||
for (string word : words) {
|
||||
switch (static_cast<int>(word.size()) - static_cast<int>(s.size())) {
|
||||
case 1: { // 需要删
|
||||
for (int i = 0; i < word.size(); i++) {
|
||||
if (word[i] != s[i]) {
|
||||
if (deleted_char(word, i) == s) {
|
||||
results.push_back(word);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case -1: {
|
||||
for (int i = 0; i < s.size(); i++) {
|
||||
if (word[i] != s[i]) {
|
||||
if (deleted_char(s, i) == word) {
|
||||
results.push_back(word);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 0: {
|
||||
if (word == s) { return vector{word}; }
|
||||
int diff_count = 0;
|
||||
for (int i = 0; i < s.size(); i++) {
|
||||
if (word[i] != s[i]) {
|
||||
diff_count++;
|
||||
}
|
||||
if (diff_count > 1) { break; }
|
||||
}
|
||||
if (diff_count == 1) {
|
||||
results.push_back(word);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
int main() {
|
||||
ios::sync_with_stdio(false);
|
||||
cin.tie(nullptr);
|
||||
|
||||
string s;
|
||||
while (cin >> s && s[0] != '#') {
|
||||
words.push_back(s);
|
||||
}
|
||||
while (cin >> s && s[0] != '#') {
|
||||
vector<string> results = query(s);
|
||||
if (!results.empty() && results[0] == s) {
|
||||
cout << s << " is correct" << endl;
|
||||
continue;
|
||||
}
|
||||
cout << s << ": ";
|
||||
for (const string& result : results) {
|
||||
cout << result << " ";
|
||||
}
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user