Run Time: 0.026
Ranking (as of 2016-04-01): 44 out of 404
Language: C++
/* UVa 613 - Numbers That Count To build using Visual Studio 2012: cl -EHsc -O2 UVa_613_Numbers_That_Count.cpp */ #include <iostream> #include <string> #include <sstream> #include <map> #include <cstring> using namespace std; const int nr_digits = '9' - '0' + 1, iterations_max = 15; int main() { while (true) { string inventory; cin >> inventory; if (inventory == "-1") break; string ps = inventory; map<string, int> inventories; int iterations; for (iterations = 0; iterations < iterations_max; iterations++) { int freqs[nr_digits]; memset(freqs, 0, sizeof(freqs)); for (const char* p = ps.c_str(); *p; p++) freqs[*p - '0']++; ostringstream oss; for (int i = 0; i < nr_digits; i++) if (freqs[i]) oss << freqs[i] << i; string s = oss.str(); #ifdef DEBUG cout << iterations << ": " << s << endl; #endif if (s == ps) { if (iterations) cout << inventory << " is self-inventorying after " << iterations << " steps\n"; else cout << inventory << " is self-inventorying\n"; break; } pair<map<string, int>::iterator, bool> result = inventories.insert(make_pair(s, iterations)); if (!result.second) { cout << inventory << " enters an inventory loop of length " << iterations - result.first->second << endl; break; } ps = s; } if (iterations == iterations_max) cout << inventory << " can not be classified after 15 iterations\n"; } return 0; }
No comments:
Post a Comment