結果

問題 No.3549 SigMax Digits (Judge ver.)
コンテスト
ユーザー sai
提出日時 2026-05-23 20:14:40
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 513 ms / 3,000 ms
コード長 1,188 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 3,349 ms
コンパイル使用メモリ 333,880 KB
実行使用メモリ 6,400 KB
最終ジャッジ日時 2026-05-23 20:14:51
合計ジャッジ時間 5,348 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge2_0
純コード判定待ち
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 7
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>

long long solve(long long x) {
  long long dp[2][10][2] = {};
  int now = 0;
  std::string s = std::to_string(x);
  for (int c = 1; c < s[0] - '0'; c++) {
    dp[now][c][1]++;
  }
  dp[now][s[0] - '0'][0]++;
  for (int i = 1; i < (int)s.size(); i++) {
    int nxt = 1 - now;
    for (int j = 0; j < 10; j++) {
      for (int ii = 0; ii < 2; ii++) {
        dp[nxt][j][ii] = 0;
      }
    }
    for (int j = 0; j < 10; j++) {
      for (int c = 0; c < 10; c++) {
        dp[nxt][std::max(j, c)][1] += dp[now][j][1];
      }
    }
    for (int j = 0; j < 10; j++) {
      for (int c = 0; c < s[i] - '0'; c++) {
        dp[nxt][std::max(j, c)][1] += dp[now][j][0];
      }
      dp[nxt][std::max(j, s[i] - '0')][0] += dp[now][j][0];
    }
    for (int c = 1; c < 10; c++) {
      dp[nxt][c][1]++;
    }
    now = nxt;
  }
  long long res = 0;
  for (int c = 0; c < 10; c++) {
    res += c * (dp[now][c][0] + dp[now][c][1]);
  }
  return res;
}

int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  int tc;
  std::cin >> tc;
  for (;tc--;) {
    long long l, r;
    std::cin >> l >> r;
    std::cout << solve(r) - solve(l - 1) << '\n';
  }
}
0