Comet OJ - Contest #4(数论+推公式)

    xiaoxiao2024-11-13  83

    PS:做这道题的时候开始公式推错了,就一直wrong,哎,还是太菜了。 题解:

    #include <cstdio> using int64 = long long; int main() { int T; scanf("%d", &T); for (int cas = 1; cas <= T; ++cas) { int64 l, r, k; scanf("%lld%lld%lld", &l, &r, &k); if (k & 1) printf("%lld\n", r - l + 1);//k为奇数是,数列值全为1 else { auto sum = [] (int64 n, int64 k) { if (n < k) return n + 1; int64 l = n / k; int64 zeros = l / (k + 1) * k; if (l % (k + 1)) { zeros += l % (k + 1) - 1; zeros += n % k >= l % (k + 1) - 1; } return n + 1 - zeros; }; printf("%lld\n", sum(r, k) - sum(l - 1, k)); } } return 0; }
    最新回复(0)