結果
| 問題 | No.3549 SigMax Digits (Judge ver.) |
| コンテスト | |
| ユーザー |
pengin_2000
|
| 提出日時 | 2026-05-22 22:54:21 |
| 言語 | C (gcc 15.2.0) |
| 結果 |
AC
|
| 実行時間 | 271 ms / 3,000 ms |
| コード長 | 1,011 bytes |
| 記録 | |
| コンパイル時間 | 1,788 ms |
| コンパイル使用メモリ | 38,144 KB |
| 実行使用メモリ | 6,400 KB |
| 最終ジャッジ日時 | 2026-05-22 22:54:26 |
| 合計ジャッジ時間 | 3,668 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge3_0 |
| 純コード判定待ち |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 7 |
ソースコード
#include<stdio.h>
long long int dp[2][2];
long long int count(long long int n, long long int v)
{
long long int d;
dp[0][0] = 1;
dp[0][1] = 0;
for (d = 1; d <= n; d *= 10);
for (d /= 10; d > 0; d /= 10)
{
dp[1][0] = dp[1][1] = 0;
if (n / d % 10 > v)
dp[1][1] += (dp[0][0] + dp[0][1]) * (v + 1);
else
{
dp[1][1] += (dp[0][0] + dp[0][1]) * (n / d % 10);
dp[1][1] += dp[0][1];
dp[1][0] += dp[0][0];
dp[1][1] += dp[0][1] * (v - n / d % 10);
}
dp[0][0] = dp[1][0];
dp[0][1] = dp[1][1];
}
return dp[0][0] + dp[0][1];
}
long long int res[16];
long long int cal(long long int n)
{
long long int i;
for (i = 0; i < 10; i++)
res[i] = count(n, i);
for (i = 9; i > 0; i--)
res[i] -= res[i - 1];
long long int ans = 0;
for (i = 0; i < 10; i++)
ans += i * res[i];
return ans;
}
void solve()
{
long long int l, r;
scanf("%lld %lld", &l, &r);
printf("%lld\n", cal(r) - cal(l - 1));
return;
}
int main()
{
int t;
scanf("%d", &t);
for (; t > 0; t--)
solve();
return 0;
}
pengin_2000