Ranking (as of 2015-03-08): 34 out of 225
Language: C++
/* UVa 335 - Processing MX Records To build using Visual Studio 2012: cl -EHsc -O2 UVa_335_Processing_MX_Records.cpp */ #include <iostream> #include <string> #include <sstream> #include <vector> using namespace std; struct MX_record { vector<string> pieces_; bool operational_; int preference_; string redirected_name_; }; void get_pieces(const string& s, vector<string>& pieces) { for (const char *p = s.c_str(), *q = p; *p; ) { while (*p && *p != '.') p++; pieces.push_back(string(q, p - q)); if (*p) q = ++p; } } bool compare_pieces(const vector<string>& vs, const vector<string>& vt) { int i = vs.size() - 1, j = vt.size() - 1; for( ; i >= 0 && j >= 0; i--, j--) { if (vs[i] == "*" || vt[j] == "*") return true; else if (vs[i] != vt[j]) return false; } return (i == -1 && j == -1) ? true : false; } int main() { string s, line; getline(cin, line); istringstream iss(line); int N; iss >> N; iss.clear(); vector<MX_record> MX_records(N); for (int i = 0; i < N; i++) { MX_records[i].operational_ = true; getline(cin, line); iss.str(line); if (line[0] != ' ') { iss >> s; get_pieces(s, MX_records[i].pieces_); } else MX_records[i].pieces_ = MX_records[i - 1].pieces_; iss >> MX_records[i].preference_ >> MX_records[i].redirected_name_; iss.clear(); } while (true) { getline(cin, line); if (line[0] == 'X') break; else { iss.str(line); char c; iss >> c >> s; iss.clear(); switch (c) { case 'A': { vector<string> pieces; get_pieces(s, pieces); int ri = -1; for (int i = 0; i < N; i++) if (compare_pieces(pieces, MX_records[i].pieces_)) { if (MX_records[i].operational_ && (ri == -1 || MX_records[ri].preference_ > MX_records[i].preference_)) ri = i; } cout << s << " =>"; if (ri != -1) cout << ' ' << MX_records[ri].redirected_name_; cout << endl; } break; case 'U': for (int i = 0; i < N; i++) if (MX_records[i].redirected_name_ == s) MX_records[i].operational_ = true; break; case 'D': for (int i = 0; i < N; i++) if (MX_records[i].redirected_name_ == s) MX_records[i].operational_ = false; break; } } } return 0; }
No comments:
Post a Comment