CSES - Datatähti 2022 loppu - Results
Submission details
Task:Pallo
Sender:hltk
Submission time:2022-01-22 16:25:28 +0200
Language:C++ (C++17)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED10
#2ACCEPTED35
#3ACCEPTED55
Test results
testverdicttimegroup
#1ACCEPTED0.01 s1, 2, 3details
#2ACCEPTED0.01 s2, 3details
#3ACCEPTED0.01 s3details

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