Ranking (as of 2014-01-22): 212 out of 588
Language: C++
/*
UVa 10126 - Zipf's Law
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_10126_Zipfs_Law.cpp
*/
#include <iostream>
#include <string>
#include <sstream>
#include <map>
#include <algorithm>
#include <cctype>
using namespace std;
int main ()
{
string line;
istringstream iss;
bool printed = false;
while (getline(cin, line)) {
if (printed)
cout << endl;
else
printed = true;
istringstream iss(line);
int n;
iss >> n;
map<string, int> words;
while (true) {
getline(cin, line);
if (line == "EndOfText")
break;
transform(line.begin(), line.end(), line.begin(), (int(*)(int))tolower);
for (const char* p = line.c_str(); *p; ) {
for ( ; *p && !isalpha(*p); p++)
;
const char* q = p;
for ( ; *p && isalpha(*p); p++)
;
if (p - q) {
pair<map<string, int>::iterator, bool> result =
words.insert(make_pair(string(q, p - q), 1));
if (!result.second)
result.first->second++;
}
}
}
bool found = false;
for (map<string, int>::const_iterator i = words.begin(), e = words.end();
i != e; ++i)
if (i->second == n) {
found = true;
cout << i->first << endl;
}
if (!found)
cout << "There is no such word.\n";
}
return 0;
}
No comments:
Post a Comment