diff options
Diffstat (limited to 'cpptour/weirdo.cc')
-rw-r--r-- | cpptour/weirdo.cc | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/cpptour/weirdo.cc b/cpptour/weirdo.cc deleted file mode 100644 index f79336c..0000000 --- a/cpptour/weirdo.cc +++ /dev/null @@ -1,83 +0,0 @@ -#include <iostream> -#include <set> -#include <stdexcept> -#include <string> -#include <unordered_map> - -using namespace std; - -typedef unordered_map<char, size_t> charmap; -typedef set<char> charset; - -constexpr double INF = 1e7; -const charset VOWELS {'a', 'e', 'i', 'o', 'u'}; - -inline size_t -sqr (size_t i) -{ - return i * i; -} - -bool -isvowel (const string& s, size_t i) -{ - try { return VOWELS.count (s.at (i)); } - catch (out_of_range const& e) { return true; } -} - -void -update (const string& s, charmap& x, charmap& f) -{ - charset b; - for (const auto& c : s) - { - f[c]++; - b.insert (c); - } - for (const auto& c : b) - x[c]++; -} - -int -main () -{ - size_t t, l; - string s; - - cin >> t; - while (t--) - { - charmap xa, fa, xb, fb; - cin >> l; - while (l--) - { - cin >> s; - size_t i = s.size (); - bool a = true; - - while (i--) - if (isvowel (s, i - 1) + isvowel (s, i) + isvowel (s, i + 1) < 2) - { - update (s, xb, fb); - a = false; - break; - } - if (a) - update (s, xa, fa); - } - - double sc = 1.0; - for (const auto& p : xa) - sc *= p.second; - for (const auto& p : fa) - sc /= sqr (p.second); - for (const auto& p : xb) - sc /= p.second; - for (const auto& p : fb) - sc *= sqr (p.second); - if (sc > INF) - cout << "Infinity" << endl; - else - cout << sc << endl; - } -} |