結果

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

ソースコード

diff #

#include <stdio.h>
#include <math.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 solver_inner(long long n, long long x, long long k, long long d)
{
    return n - (floor_sum(k, k, d, n) - floor_sum(k, k - x, d, n));
}
long long solver(long long lim, long long k, long long c)
{
    long long n = lim / k;
    if (n <= 0)
        return 0;
    long long ans = 0;
    for (long long d = 1; d <= 9; ++d)
        ans += solver_inner(n, c * pow(10, (d - 1)), k, pow(10, d)) - solver_inner(n, (c + 1) * pow(10, d - 1), k, pow(10, d));
    return ans;
}
void solve(void)
{
    long long L, R, K, C;
    scanf("%lld%lld%lld%lld", &L, &R, &K, &C);
    printf("%lld\n", solver(R, K, C) - solver(L - 1, K, C));
}

int main(void)
{
    int T;
    scanf("%d", &T);
    while (T--)
    {
        solve();
    }
    return 0;
}
0