Ranking (as of 2013-06-09): 461 out of 1887
Language: C++
/* UVa 755 - 487-3279 To build using Visual Studio 2008: cl -EHsc -O2 487_3279.cpp */ #include <iostream> #include <iomanip> #include <string> #include <sstream> #include <map> #include <cctype> #ifdef __ELAPSED_TIME__ #include <ctime> #endif using namespace std; int main() { #ifdef __ELAPSED_TIME__ clock_t start = clock(); #endif const int letters[] = {2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 0, 7, 7, 8, 8, 8, 9, 9, 9, 0}; string line; istringstream iss(line); getline(cin, line); iss.str(line); int s; iss >> s; iss.clear(); while (s--) { getline(cin, line); // skip a blank line getline(cin, line); iss.str(line); int n; iss >> n; iss.clear(); map<int, int> tns; // key is a telephone number, value is its number of occurrences for (int i = 0; i < n; i++) { getline(cin, line); int tn = 0, j = 0; for (const char* p = line.c_str(); *p && j < 7; p++) if (isalnum(*p)) { if (j++) tn *= 10; if (isdigit(*p)) tn += *p - '0'; else tn += letters[*p - 'A']; } map<int, int>::iterator k = tns.find(tn); if (k == tns.end()) tns.insert(make_pair(tn, 1)); else k->second++; } bool duplicates = false; for (map<int, int>::const_iterator i = tns.begin(), e = tns.end(); i != e; ++i) if (i->second > 1) { duplicates = true; cout << setfill('0') << setw(3) << i->first / 10000 << '-' << setw(4) << i->first % 10000 << ' ' << i->second << endl; } if (!duplicates) cout << "No duplicates.\n"; if (s) cout << endl; } #ifdef __ELAPSED_TIME__ cerr << "elapsed time = " << static_cast<double>(clock() - start) / CLOCKS_PER_SEC << " sec.\n"; #endif return 0; }
No comments:
Post a Comment