Блог пользователя ajitkumar014

Автор ajitkumar014, история, 15 месяцев назад, По-английски

unable to understand why if(last*2 < g) is done,please someone explain. Thankyou.

include "bits/stdc++.h"

using namespace std;

int main() { int t; scanf ("%d", &t); while (t--) { long long n, k, g; scanf ("%lld %lld %lld", &n, &k, &g);

    long long stolen = min((g - 1) / 2 * n, k * g);
    long long rest = (k * g - stolen) % g;

    if (rest > 0) {
        stolen -= (g - 1) / 2;
        long long last = ((g - 1) / 2 + rest) % g;

        if (last * 2 < g) {
            stolen += last;
        } else {
            stolen -= g - last;
        }
    }

    printf ("%lld\n", stolen);
}

}

  • Проголосовать: нравится
  • +5
  • Проголосовать: не нравится

»
14 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

This solution is very elegant and clear. Hope it helps. https://codeforces.net/contest/1836/submission/210131874