結果
| 問題 |
No.2032 Let's Write Multiples!!
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 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 |
ソースコード
#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;
}