Task: | Pallo |
Sender: | hltk |
Submission time: | 2022-01-22 16:25:28 +0200 |
Language: | C++ (C++17) |
Status: | READY |
Result: | 100 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 10 |
#2 | ACCEPTED | 35 |
#3 | ACCEPTED | 55 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.01 s | 1, 2, 3 | details |
#2 | ACCEPTED | 0.01 s | 2, 3 | details |
#3 | ACCEPTED | 0.01 s | 3 | details |
Code
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int tt; cin >> tt; while (tt--) { long n, m, k; cin >> n >> m >> k; if (n > m) swap(n, m); long K = (m - n) / (n - 1); long x = __gcd(m - n, n - 1); long T = (n - 1) / x; long vs = K + 1 + (T - 1) + ((m - n) % (n - 1) + (m - n) * (T - 1)) / (n - 1); long ans = k / (vs * (n - 1)) * (vs + (T - 1)); k %= vs * (n - 1); if (k <= (K + 1) * (n - 1)) { ans += k / (n - 1); k = 0; } else { k -= (K + 1) * (n - 1); ans += K + 1; } if (k > 0) { auto check = [&](long i) { if (i < 0) return 0l; return (i + 1) * (n - 1) + ((m - n) % (n - 1) + (m - n) * (i + 1)) / (n - 1) * (n - 1); }; long i = -1; for (long bit = 1l << __lg(T); bit; bit /= 2) { if (i + bit < T - 1 && check(i + bit) < k) { i += bit; } } assert(k > check(i) && (i == T - 2 || k <= check(i + 1))); k -= check(i); ans += (i + 1) * 2; ans += ((m - n) % (n - 1) + (m - n) * (i + 1)) / (n - 1); i++; if (i < T - 1) { long rem = ((m - n) % (n - 1) + i * (m - n)) % (n - 1); if (k >= rem) { k -= rem; ans++; if (k >= n - 1 - rem) { k -= n - 1 - rem; ans++; rem += m - n; long f = min(k / (n - 1), rem / (n - 1)); ans += f; k -= f * (n - 1); assert(k >= 0); } } } } cout << ans << endl; } }
Test details
Test 1
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
100 10 5 76 9 8 78 8 6 49 3 3 94 ... |
correct output |
---|
25 19 15 47 8 ... |
user output |
---|
25 19 15 47 8 ... Truncated |
Test 2
Group: 2, 3
Verdict: ACCEPTED
input |
---|
1000 7 5 99033171167123849 6 8 472883555390027162 9 10 258937093512465880 10 6 691774305483997493 ... |
correct output |
---|
33011057055707949 148620545979722822 57541576336103529 199845910473154830 52151060432923288 ... |
user output |
---|
33011057055707949 148620545979722822 57541576336103529 199845910473154830 5215106043292328 ... Truncated |
Test 3
Group: 3
Verdict: ACCEPTED
input |
---|
1000 816332614 86098803 33572721929... |
correct output |
---|
4310587870 45982113074 1550250683 717639357 3282221941 ... |
user output |
---|
4310587870 45982113074 1550250683 717639357 3282221941 ... Truncated |