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