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