rt,本题蒟蒻一直不知道怎么改,#8始终过不了
又因为奇奇怪怪的测评方式不知道后面的点怎么样
这道题和sp17247 貌似一样,但是两道题都过不去
多倍经验过来的
真心不知道在哪错了明明数字计数都过了
求大佬帮忙看看,感激不尽 /膜
(思路都在注释中)
//设f[i][j][k]表示第i位,最高位为j,k有多少个。
//f[i][j][k]= (l=0∑9)f[i-1][l][k]+一个数。
//这一个数是指k在这一位上出现的次数。
#include<bits/stdc++.h>
//#define int long long
#define N 1000010
#define INF 1<<30
#define mod 100000007
using namespace std;
int cnt=0;
int a,b;
int f[100][100][100];
int solve(int x,int num){
int kkk[20];
int ans=0,len=0;
memset(kkk,0,sizeof(kkk));
while(x!=0){
kkk[++len]=x%10;
x/=10;
}
for(int i=1;i<len;i++){
for(int j=1;j<=9;j++){
ans+=f[i][j][num]%mod;
}
}
for(int i=1;i<kkk[len];i++) //统计位数与原数一样,但最高位较小的数,同样不能有前导零;
ans+=f[len][i][num]%mod;
for(int i=len-1;i>=1;i--){
for(int j=0;j<kkk[i];j++){
ans+=f[i][j][num]%mod;
}
for(int j=len;j>i;j--){
if(kkk[j]==num){
ans+=(kkk[i]*pow(10,i-1));
ans=ans%mod;
}
}
}
return ans%mod;
}
signed main()
{
int k;
cin>>k;
while(k--){
//初始化
memset(f,0,sizeof(f));
cnt=0;
cin>>a>>b;
for(int i=0;i<=9;i++) f[1][i][i]=1;
for(int i=2;i<=13;i++){//总共的位数
for(int j=0;j<=9;j++){ //此位数
for(int l=0;l<=9;l++){//上位数
for(int r=0;r<=9;r++){ //统计
f[i][j][r]+=f[i-1][l][r];
}
}
f[i][j][j]+=pow(10,i-1);
}
}
for(int i=0;i<=9;i++)
cnt+=(((solve(b+1,i)-solve(a,i))+mod)*i+mod)%mod;
printf("%lld\n", cnt );
}
return 0;
}