test/cpv/aizu-alds1/alds1_15_d.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // competitive-verifier: PROBLEM https://onlinejudge.u-aizu.ac.jp/courses/lesson/1/ALDS1/all/ALDS1_15_D | ||
| 2 | #include "../../../src/edh/huffman/lib.hpp" | ||
| 3 | |||
| 4 | using namespace tifa_libs; | ||
| 5 | 50 | int main() { | |
| 6 |
1/2✓ Branch 2 taken 50 times.
✗ Branch 3 not taken.
|
50 | std::cin.tie(nullptr)->std::ios::sync_with_stdio(false); |
| 7 | 50 | strn s; | |
| 8 |
1/2✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
|
50 | std::cin >> s; |
| 9 |
1/2✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
|
50 | map<char, u32> mp; |
| 10 |
3/4✓ Branch 4 taken 1869757 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1869757 times.
✓ Branch 9 taken 50 times.
|
1869807 | for (char c : s) ++mp[c]; |
| 11 | 50 | vec<char> dict; | |
| 12 | 50 | vecu w; | |
| 13 |
5/8✓ Branch 1 taken 50 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 50 times.
✗ Branch 5 not taken.
✓ Branch 10 taken 942 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 942 times.
✓ Branch 14 taken 50 times.
|
1934 | for (auto [k, v] : mp) { |
| 14 |
1/2✓ Branch 1 taken 942 times.
✗ Branch 2 not taken.
|
942 | dict.push_back(k); |
| 15 |
1/2✓ Branch 1 taken 942 times.
✗ Branch 2 not taken.
|
942 | w.push_back(v); |
| 16 | } | ||
| 17 |
2/2✓ Branch 1 taken 8 times.
✓ Branch 2 taken 42 times.
|
50 | if (w.size() < 3) { |
| 18 |
2/2✓ Branch 1 taken 4 times.
✓ Branch 2 taken 4 times.
|
8 | if (w.size() == 1) |
| 19 |
2/4✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
|
4 | std::cout << w[0] << "\n"; |
| 20 | else | ||
| 21 |
2/4✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4 times.
✗ Branch 7 not taken.
|
4 | std::cout << w[0] + w[1] << "\n"; |
| 22 | 8 | return 0; | |
| 23 | } | ||
| 24 | 42 | huffman<u32> hf(w); | |
| 25 | 42 | auto x = hf.encode(); | |
| 26 | 42 | u64 ans = 0; | |
| 27 |
2/2✓ Branch 4 taken 930 times.
✓ Branch 5 taken 42 times.
|
972 | flt_ (u32, i, 0, (u32)w.size()) ans += w[i] * x[i].size(); |
| 28 |
2/4✓ Branch 1 taken 42 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 42 times.
✗ Branch 5 not taken.
|
42 | std::cout << ans << '\n'; |
| 29 | 42 | return 0; | |
| 30 | 50 | } | |
| 31 |