水题不解释 /* Author: ACb0y Date: 2010-11-8 Type: water~~ ProblemId: UVa 123 Searching Quickly Result: 8381985 123 Searching Quickly Accepted C++ 0.020 2010-11-08 07:06:11 */ #include <iostream> #include <algorithm> #include <sstream> #include <string> #include <set> #include <vector> using namespace std; struct node { string title; string keyWord; int order; int in_order; }; set<string> keyWord; vector<node> v; int cmp(node a, node b) { if (a.keyWord != b.keyWord) { return a.keyWord < b.keyWord; } else if (a.order != b.order) { return a.order < b.order; } else { return a.in_order < b.in_order; } } int main() { #ifndef ONLINE_JUDGE freopen("123.txt", "r", stdin); #endif int i, j; string temp; while (getline(cin, temp)) { if (temp == "::") { break; } else { keyWord.insert(temp); } } int c = 0; int length; while (getline(cin, temp)) { length = temp.size(); for (i = 0; i < length; ++i) { if (isalpha(temp[i])) { temp[i] = tolower(temp[i]); } } istringstream in(temp); string word; vector<string> vv; while (!in.eof()) { in >> word; vv.push_back(word); } length = vv.size(); for (i = 0; i < length; ++i) { if (keyWord.find(vv[i]) == keyWord.end()) { word = vv[i]; int size = word.size(); for (j = 0; j < size; ++j) { word[j] = toupper(word[j]); } node a; a.order = c; a.keyWord = word; a.in_order = i; a.title = ""; for (j = 0; j < length; ++j) { if (j != i) { if (a.title == "") { a.title = vv[j]; } else { a.title = a.title + " " + vv[j]; } } else { if (a.title == "") { a.title = word; } else { a.title = a.title + " " + word; } } } v.push_back(a); } } c++; } sort(v.begin(), v.end(), cmp); length = v.size(); for (i = 0; i < length; ++i) { cout << v[i].title << endl; } //之前因为多输出了一个换行而一直WA,去掉之后就果断AC了 //cout << endl; return 0; }