求助55pts
查看原帖
求助55pts
948216
ZackofZHOU楼主2024/11/25 12:59

记录

#include<iostream>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
ll a,b,ans,dp[51],mi[51],ans1[51],ans2[51];
int t,A[51];
void Work(ll N,ll *Cnt)
{
	int L = 0;
	ll TmpN = N;
	while(N)
	{
		A[++L] = N % 10;
		N /= 10;
	}
	for(int i = L;i > 0;i--)
	{
		for(int j = 0;j < 10;j++)
			Cnt[j] = (Cnt[j] + dp[i - 1] * A[i] % mod) % mod;
		for(int j = 0;j < A[i];j++)
			Cnt[j] = (Cnt[j] + mi[i - 1]) % mod;
		Cnt[A[i]] = (Cnt[A[i]] + (TmpN % mi[i - 1] + 1) % mod) % mod;
		Cnt[0] = (Cnt[0] - mi[i - 1] + mod) % mod;
	}
}
int main()
{
	cin >> t;
	mi[0] = 1;
	for(int i = 1;i <= 50;i++)
	{
		dp[i] = (10ll * dp[i - 1] % mod + mi[i - 1]) % mod;
		mi[i] = 10ll * mi[i - 1] % mod;
	}
	while(t--)
	{
		ans = 0;
		cin >> a >> b;
		Work(b,ans1);
		Work(a - 1,ans2);
		for(int i = 1;i < 10;i++)
		{
			ans = (ans + i * ((ans1[i] - ans2[i] + mod) % mod) % mod) % mod;
			ans1[i] = ans2[i] = 0;
		}
		cout << ans << '\n';
	}
	return 0;
}
2024/11/25 12:59
加载中...