社区讨论

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 条回复,欢迎继续交流。

正在加载回复...