結果

問題 No.3549 SigMax Digits (Judge ver.)
コンテスト
ユーザー Heart_Blue
提出日時 2026-05-22 22:39:37
言語 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  
実行時間 233 ms / 3,000 ms
コード長 1,381 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,610 ms
コンパイル使用メモリ 243,936 KB
実行使用メモリ 6,400 KB
最終ジャッジ日時 2026-05-22 22:39:49
合計ジャッジ時間 3,432 ms
ジャッジサーバーID
(参考情報)
judge2_1 / judge3_1
純コード判定待ち
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 7
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <string>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <numeric>
#include <bitset>
#include <list>
#include <stdexcept>
#include <functional>
#include <utility>
#include <iomanip>
#include <ctime>
#include <valarray>
#include <iostream>
#include <sstream>
#include <fstream>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
#define MEM(a,b) memset((a),(b),sizeof(a))
const LL INF = 1e9 + 7;
const int N = 2e5 + 10;
LL dp[20][10];
int d[20];
LL dfs(int pos, int maxv, bool lead = true, bool limit = true)
{
	if (pos == -1)
	{
		return maxv;
	}
	if (!lead && !limit && dp[pos][maxv] != -1)
		return dp[pos][maxv];
	int up = limit ? d[pos] : 9;
	LL ret = 0;
	for (int i = 0; i <= up; i++)
	{
		ret += dfs(pos - 1, max(maxv, i), lead && i == 0, limit && i == d[pos]);
	}
	if (!lead && !limit) dp[pos][maxv] = ret;
	return ret;
}
LL solve(LL n)
{
	int len = 0;
	while (n)
	{
		d[len++] = n % 10;
		n /= 10;
	}
	return dfs(len - 1, 0);
}
int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	MEM(dp, -1);
	int ncase;
	scanf("%d", &ncase);
	while (ncase--)
	{
		LL l, r;
		scanf("%lld%lld", &l, &r);
		printf("%lld\n", solve(r) - solve(l - 1));
	}
	return 0;
}
0