求助大佬,一直卡到70分过不了
查看原帖
求助大佬,一直卡到70分过不了
1159443
wangluochen楼主2024/7/25 15:51
#include <bits/stdc++.h>
using namespace std;
const int N = 15;
const int M =1e9 +7;
typedef long long ll;
ll l, r, dp[N], mi[N];
ll ans1[N], ans2[N],www;
int[N],n;

void solve(ll n, ll ans[N]) {
    ll tmp = n;
    int len = 0;
    while (n) a[++len] = n % 10, n /= 10;
    for (int i = len; i >= 1; --i) {
    for (int j = 0; j < 10; j++) ans[j] += dp[i - 1] * a[i];
    for (int j = 0; j < a[i]; j++) ans[j] += mi[i - 1];
    tmp -= mi[i - 1] * a[i], ans[a[i]] += tmp + 1;
    
  }
}

int main() {
	cin>>n;
	for(int xxx=0;xxx<n;xxx++){
		www=0;
		memset(dp,0,sizeof dp);
		memset(mi,0,sizeof mi);
		memset(ans1,0,sizeof ans1);
		memset(ans2,0,sizeof ans2);
		memset(a,0,sizeof a);
		scanf("%lld%lld", &l, &r);
	    mi[0] = 1ll;
	    for (int i = 1; i <= 13; ++i) {
	    dp[i] = dp[i - 1] * 10 + mi[i - 1];
	    mi[i] = 10ll * mi[i - 1];
	    }
	    solve(r, ans1), solve(l - 1, ans2);
	    for (int i = 1; i < 10; i++) www=(www+(ans1[i] - ans2[i])*i)%M;
	    www=www%M;
	    cout<<www<<'\n';
		
	}
    
      return 0;
} 

感谢回答

2024/7/25 15:51
加载中...