社区讨论
90pts,悬关求调
P4999烦人的数学作业参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m2w1o0u1
- 此快照首次捕获于
- 2024/10/30 23:41 去年
- 此快照最后确认于
- 2025/11/04 15:40 4 个月前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int ten[30],dp[30],cnta[30],cntb[30],num[30],T,l,r,ans;
inline void init(){
ten[0]=1;
for(int i=1;i<=18;i++){
dp[i]=i*ten[i-1]%mod;
ten[i]=ten[i-1]*10%mod;
}
}
inline void solve(int x,int cnt[]){
int len=0;
while(x){
num[++len]=x%10;
x/=10;
}
for(int i=len;i>=1;i--){
for(int j=0;j<=9;j++)
cnt[j]=(cnt[j]+num[i]*dp[i-1]%mod)%mod;
for(int j=1;j<num[i];j++)
cnt[j]=(cnt[j]+ten[i-1])%mod;
int num2=0;
for(int j=i-1;j>=1;j--)
num2=num2*10+num[j];
cnt[num[i]]=(cnt[num[i]]+num2+1)%mod;
cnt[0]=(cnt[0]-ten[i-1]+mod)%mod;
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin>>T;
init();
while(T--){
ans=0;
memset(cnta,0,sizeof(cnta));
memset(cntb,0,sizeof(cntb));
cin>>l>>r;
solve(l-1,cnta);
solve(r,cntb);
for(int i=1;i<=9;i++)
ans=(ans+i*(cntb[i]-cnta[i])%mod)%mod;
cout<<ans<<"\n";
}
return 0;
}
rt
回复
共 1 条回复,欢迎继续交流。
正在加载回复...