結果

問題 No.2032 Let's Write Multiples!!
ユーザー JashinchanJashinchan
提出日時 2022-08-24 12:07:34
言語 C
(gcc 12.3.0)
結果
WA  
実行時間 -
コード長 1,115 bytes
コンパイル時間 356 ms
コンパイル使用メモリ 30,464 KB
実行使用メモリ 6,948 KB
最終ジャッジ日時 2024-04-20 02:50:04
合計ジャッジ時間 1,960 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
権限があれば一括ダウンロードができます

ソースコード

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