test/cpv_local/game/mahjong_parser.uva11210.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // competitive-verifier: LOCALCASE test/cpv_local/_data/uva/11210 | ||
| 2 | |||
| 3 | #include "../../../src/game/mahjong/parser/lib.hpp" | ||
| 4 | |||
| 5 | using namespace tifa_libs; | ||
| 6 | using std::cin, std::cout; | ||
| 7 | using namespace tifa_libs::literals; | ||
| 8 | |||
| 9 | 9 | static auto [mp, mp2] = [] { | |
| 10 | #define _(n, i, j) {#n #i, n##_mj##j} | ||
| 11 | #define __(i, j) _(1, i, j), _(2, i, j), _(3, i, j), _(4, i, j), _(5, i, j), _(6, i, j), _(7, i, j), _(8, i, j), _(9, i, j) | ||
| 12 | std::map<strn, mahjong_card> mp{ | ||
| 13 | ✗ | __(T, p), | |
| 14 | ✗ | __(S, s), | |
| 15 | ✗ | __(W, m), | |
| 16 | ✗ | {"DONG", 1_mjz}, | |
| 17 | ✗ | {"NAN", 2_mjz}, | |
| 18 | ✗ | {"XI", 3_mjz}, | |
| 19 | ✗ | {"BEI", 4_mjz}, | |
| 20 | ✗ | {"ZHONG", 5_mjz}, | |
| 21 | ✗ | {"FA", 6_mjz}, | |
| 22 | ✗ | {"BAI", 7_mjz}, | |
| 23 |
3/6✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 306 times.
✓ Branch 4 taken 9 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
324 | }; |
| 24 | #undef __ | ||
| 25 | #undef _ | ||
| 26 | |||
| 27 | 9 | arr<strn, 45> mp2; | |
| 28 |
3/4✓ Branch 8 taken 306 times.
✗ Branch 9 not taken.
✓ Branch 12 taken 306 times.
✓ Branch 13 taken 9 times.
|
315 | for (auto CR[k, v] : mp) mp2[v.encode()] = k; |
| 29 |
1/2✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
|
18 | return std::make_pair(mp, mp2); |
| 30 |
34/72✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 9 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 9 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 9 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 9 times.
✗ Branch 23 not taken.
✓ Branch 26 taken 9 times.
✗ Branch 27 not taken.
✓ Branch 30 taken 9 times.
✗ Branch 31 not taken.
✓ Branch 34 taken 9 times.
✗ Branch 35 not taken.
✓ Branch 38 taken 9 times.
✗ Branch 39 not taken.
✓ Branch 42 taken 9 times.
✗ Branch 43 not taken.
✓ Branch 46 taken 9 times.
✗ Branch 47 not taken.
✓ Branch 50 taken 9 times.
✗ Branch 51 not taken.
✓ Branch 54 taken 9 times.
✗ Branch 55 not taken.
✓ Branch 58 taken 9 times.
✗ Branch 59 not taken.
✓ Branch 62 taken 9 times.
✗ Branch 63 not taken.
✓ Branch 66 taken 9 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 9 times.
✗ Branch 71 not taken.
✓ Branch 74 taken 9 times.
✗ Branch 75 not taken.
✓ Branch 78 taken 9 times.
✗ Branch 79 not taken.
✓ Branch 82 taken 9 times.
✗ Branch 83 not taken.
✓ Branch 86 taken 9 times.
✗ Branch 87 not taken.
✓ Branch 90 taken 9 times.
✗ Branch 91 not taken.
✓ Branch 94 taken 9 times.
✗ Branch 95 not taken.
✓ Branch 98 taken 9 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 9 times.
✗ Branch 103 not taken.
✓ Branch 106 taken 9 times.
✗ Branch 107 not taken.
✓ Branch 110 taken 9 times.
✗ Branch 111 not taken.
✓ Branch 114 taken 9 times.
✗ Branch 115 not taken.
✓ Branch 118 taken 9 times.
✗ Branch 119 not taken.
✓ Branch 122 taken 9 times.
✗ Branch 123 not taken.
✓ Branch 126 taken 9 times.
✗ Branch 127 not taken.
✓ Branch 130 taken 9 times.
✗ Branch 131 not taken.
✓ Branch 134 taken 9 times.
✗ Branch 135 not taken.
✗ Branch 138 not taken.
✗ Branch 139 not taken.
✗ Branch 140 not taken.
✗ Branch 141 not taken.
|
18 | }(); |
| 31 | |||
| 32 | 9 | int main() { | |
| 33 |
1/2✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
|
9 | cout << std::fixed << std::setprecision(2); |
| 34 | |||
| 35 | 9 | u32 kase = 0; | |
| 36 | 9 | strn s; | |
| 37 |
7/10✓ Branch 1 taken 296 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 296 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 296 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 287 times.
✓ Branch 10 taken 9 times.
✓ Branch 11 taken 287 times.
✓ Branch 12 taken 9 times.
|
296 | while (std::getline(cin, s) && s[0] != '0') { |
| 38 | 287 | vec<mahjong_card> hand; | |
| 39 |
1/2✓ Branch 1 taken 287 times.
✗ Branch 2 not taken.
|
287 | hand.reserve(13); |
| 40 | { | ||
| 41 |
1/2✓ Branch 1 taken 287 times.
✗ Branch 2 not taken.
|
287 | std::stringstream ss; |
| 42 |
1/2✓ Branch 1 taken 287 times.
✗ Branch 2 not taken.
|
287 | ss << s; |
| 43 |
6/10✓ Branch 1 taken 3731 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3731 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4018 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4018 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 3731 times.
✓ Branch 13 taken 287 times.
|
4018 | while (ss >> s) hand.push_back(mp[s]); |
| 44 | 287 | } | |
| 45 | 287 | vecu ans; | |
| 46 |
1/2✓ Branch 1 taken 287 times.
✗ Branch 2 not taken.
|
287 | auto res = mahjong_parser<13>(hand); |
| 47 |
2/2✓ Branch 5 taken 2394 times.
✓ Branch 6 taken 287 times.
|
2681 | for (auto CR p : res) { |
| 48 |
2/2✓ Branch 1 taken 2212 times.
✓ Branch 2 taken 182 times.
|
2394 | if (!p.win()) continue; |
| 49 | 182 | auto _ = p.improve_cards(); | |
| 50 |
1/2✓ Branch 5 taken 182 times.
✗ Branch 6 not taken.
|
182 | ans.insert(ans.end(), _.begin(), _.end()); |
| 51 | 182 | } | |
| 52 |
3/6✓ Branch 1 taken 287 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 287 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 287 times.
✗ Branch 8 not taken.
|
287 | cout << "Case " << ++kase << ": "; |
| 53 |
4/6✓ Branch 1 taken 287 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 235 times.
✓ Branch 9 taken 52 times.
✓ Branch 11 taken 235 times.
✗ Branch 12 not taken.
|
287 | if (ans = uniq(ans); ans.empty()) cout << "Not ready\n"; |
| 54 | else | ||
| 55 |
4/6✓ Branch 4 taken 125 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 125 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 125 times.
✓ Branch 11 taken 52 times.
|
177 | flt_ (u32, i, 0, (u32)ans.size()) cout << mp2[ans[i]] << " \n"[i + 1 == ans.size()]; |
| 56 | 287 | } | |
| 57 | 9 | } | |
| 58 |