結果

問題 No.2032 Let's Write Multiples!!
ユーザー Jashinchan
提出日時 2022-08-24 12:07:34
言語 C
(gcc 13.3.0)
結果
WA  
実行時間 -
コード長 1,115 bytes
コンパイル時間 304 ms
コンパイル使用メモリ 29,440 KB
実行使用メモリ 6,824 KB
最終ジャッジ日時 2024-10-11 21:43:33
合計ジャッジ時間 1,939 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample WA * 1
other WA * 24
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <stdio.h>

unsigned long long int floor_sum(long long a, long long b, long long m, long long n)
{
    unsigned long long int ans = a / m * ((n - 1) * n / 2) + b / m * n;
    a %= m;
    b %= m;
    if (!a)
        return ans;
    unsigned long long int n2 = (a * n + b) / m;
    return ans + (n - 1) * n2 - floor_sum(n2, a, m, m - 1 - b);
}

long long f(long long ll, long long rr, long long k, long long d, long long x)
{
    long long p = floor_sum(rr, d, k, 0) - floor_sum(ll, d, k, 0);
    long long q = floor_sum(rr, d, k, d - x) - floor_sum(ll, d, k, d - x) - (rr - ll);
    return (rr - ll) - (p - q);
}

int main(void)
{
    int T;
    scanf("%d", &T);
    while (T--)
    {
        long long l, r, k, c;
        scanf("%lld %lld %lld %lld", &l, &r, &k, &c);
        long long ll = (l + k - 1) / k;
        long long rr = r / k + 1;
        long long ans = 0, now = 0;
        for (long long i = 0; i < 9; ++i)
        {
            ans += f(ll, rr, k, now * 10, now * c) - f(ll, rr, k, now * 10, now * (c + 1));
            now *= 10;
        }
        printf("%lld\n", ans);
    }
    return 0;
}
0