diff options
-rwxr-xr-x | codechef/hrdseq.py | 9 | ||||
-rwxr-xr-x | codechef/sc31.py | 6 | ||||
-rw-r--r-- | codechef/sc31.raku | 1 | ||||
-rw-r--r-- | cpptour/Vector-test.cc | 9 | ||||
-rw-r--r-- | cpptour/Vector.cc | 23 | ||||
-rw-r--r-- | cpptour/Vector.h | 3 | ||||
-rw-r--r-- | cpptour/weirdo.cc | 83 | ||||
m--------- | paip/book | 0 |
8 files changed, 129 insertions, 5 deletions
diff --git a/codechef/hrdseq.py b/codechef/hrdseq.py new file mode 100755 index 0000000..a47ef2d --- /dev/null +++ b/codechef/hrdseq.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python3 +seq = [0, 0, 1, 0, 2, 0, 2, 2, 1, 6, 0, 5, 0, 2, 6, 5, 4, 0, 5, 3, 0, 3, 2, 9, + 0, 4, 9, 3, 6, 14, 0, 6, 3, 5, 15, 0, 5, 3, 5, 2, 17, 0, 6, 11, 0, 3, 8, + 0, 3, 3, 1, 42, 0, 5, 15, 20, 0, 4, 32, 0, 3, 11, 18, 0, 4, 7, 0, 3, 7, + 3, 2, 31, 0, 6, 31, 3, 6, 3, 2, 8, 33, 0, 9, 56, 0, 3, 8, 7, 19, 0, 5, + 37, 0, 3, 8, 8, 1, 46, 0, 6, 23, 0, 3, 9, 21, 0, 4, 42, 56, 25, 0, 5, + 21, 8, 18, 52, 0, 6, 18, 4, 13, 0, 5, 11, 62, 0, 4, 7] +for t in range(int(input())): + print((lambda n: seq[:n].count(seq[n-1]))(int(input()))) diff --git a/codechef/sc31.py b/codechef/sc31.py new file mode 100755 index 0000000..470c294 --- /dev/null +++ b/codechef/sc31.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python3 +from functools import reduce + +for t in range(int(input())): + print(bin(reduce(int.__xor__, (int(input(), 2) + for i in range(int(input()))))).count('1')) diff --git a/codechef/sc31.raku b/codechef/sc31.raku new file mode 100644 index 0000000..6aab576 --- /dev/null +++ b/codechef/sc31.raku @@ -0,0 +1 @@ +put [+] ([+^] (^get).map: {:2(get)}).base(2).comb for ^get diff --git a/cpptour/Vector-test.cc b/cpptour/Vector-test.cc index b49ff85..fbdf129 100644 --- a/cpptour/Vector-test.cc +++ b/cpptour/Vector-test.cc @@ -1,3 +1,4 @@ +#include <cassert> #include <iostream> #include <stdexcept> @@ -13,8 +14,16 @@ neg_length () catch (bad_alloc) { cout << "BIG OOF!" << endl; } } +void +init () +{ + Vector v {7.4, 3.2, 5.2, 6.9, 9.5, 4.2, 21.7}; + assert(v[5] == 4.2); +} + int main () { neg_length (); + init (); } diff --git a/cpptour/Vector.cc b/cpptour/Vector.cc index aa09eef..8f94345 100644 --- a/cpptour/Vector.cc +++ b/cpptour/Vector.cc @@ -12,14 +12,27 @@ Vector::Vector (int s) sz = s; } -double& Vector::operator[] (int i) +Vector::Vector (initializer_list<double> lst) +: elem {new double[lst.size()]}, sz {static_cast<int> (lst.size())} { - if (i < 0 || size() <= i) - throw out_of_range{"Vector::operator[]"}; - return elem[i]; + copy(lst.begin(), lst.end(), elem); +} + +Vector::~Vector () +{ + delete[] elem; } -int Vector::size () noexcept +int +Vector::size () noexcept { return sz; } + +double& +Vector::operator[] (int i) +{ + if (i < 0 || size() <= i) + throw out_of_range{"Vector::operator[]"}; + return elem[i]; +} diff --git a/cpptour/Vector.h b/cpptour/Vector.h index c7bbc68..8508503 100644 --- a/cpptour/Vector.h +++ b/cpptour/Vector.h @@ -1,8 +1,11 @@ class Vector { public: Vector (int s); + Vector (std::initializer_list<double>); + ~Vector (); double& operator[] (int i); int size () noexcept; + void push_back (double); private: double* elem; int sz; diff --git a/cpptour/weirdo.cc b/cpptour/weirdo.cc new file mode 100644 index 0000000..f79336c --- /dev/null +++ b/cpptour/weirdo.cc @@ -0,0 +1,83 @@ +#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; + } +} diff --git a/paip/book b/paip/book -Subproject 190a5c33aea5591698686c1db5fe44b0619e1b9 +Subproject 142d97f52b76bb8a02551636972db8b0747e165 |