結果
| 問題 | No.3549 SigMax Digits (Judge ver.) |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-05-22 23:19:32 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 558 ms / 3,000 ms |
| コード長 | 1,359 bytes |
| 記録 | |
| コンパイル時間 | 2,569 ms |
| コンパイル使用メモリ | 334,516 KB |
| 実行使用メモリ | 6,400 KB |
| 最終ジャッジ日時 | 2026-05-22 23:19:40 |
| 合計ジャッジ時間 | 5,886 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge1_0 |
| 純コード判定待ち |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 7 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main(void){
int t;
cin>>t;
auto ketadp = [&](long long s){
vector<long long>keta;
long long tmp=s;
while(tmp){
keta.push_back(tmp%10);
tmp/=10;
}
keta.push_back(0);
reverse(keta.begin(),keta.end());
long long dp[10][2][60]={};
//max,tight
long long mx=0;
dp[0][1][0]=1;
int ks=keta.size();
for(int i=0;i<ks-1;i++){
for(int j=0;j<10;j++){
for(int k=0;k<10;k++){
dp[max(k,j)][0][i+1]+=dp[j][0][i];
}
}
int j=mx;
for(int k=0;k<10;k++){
if(k<keta[i+1]){
dp[max(k,j)][0][i+1]+=dp[j][1][i];
}else{
dp[max(k,j)][1][i+1]+=dp[j][1][i];
break;
}
}
mx=max(keta[i+1],mx);
}
long long sum=0;
for(int i=0;i<10;i++){
sum+=i*dp[i][0][ks-1];
sum+=i*dp[i][1][ks-1];
}
//cout<<dp[0][1][ks-1]<<" "<<dp[1][1][ks-1]<<endl;
return sum;
};
while(t--){
long long l,r;
cin>>l>>r;
cout<<ketadp(r)-ketadp(l-1)<<endl;
}
return 0;
}