求助dalao 90分
查看原帖
求助dalao 90分
867875
niveKmAI楼主2023/8/9 17:58
#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
unsigned long long n,m;
unsigned long long ans[11];
unsigned long long ans1[11];
unsigned long long num[3][20];
unsigned long long num1[3][20];
unsigned long long op=0;
unsigned long long suq=m;
unsigned long long kk=10;
unsigned long long le=1;
unsigned long long len=1;
unsigned long long su=n;
unsigned long long k=10;
int main(){
 int t;
  cin>>t;
  while(t--){
     memset(ans,0,sizeof(ans));
     memset(ans1,0,sizeof(ans1));
     memset(num,0,sizeof(num));
     memset(num1,0,sizeof(num1));
  op=0;
  cin>>n>>m;
  n-=1;
  len=1;
  su=n;
  k=10;
  while(n/10!=0){
    num[0][len]=n%10;
    n/=10;
    num[1][len]=n;
    num[2][len]=su-num[1][len]*k-num[0][len]*k/10;
    len++;
    k=k*10;
  }
  num[0][len]=n;
  num[1][len]=0;
  num[2][len]=su-k/10*n;
  for(unsigned long long i=1; i<=len; i++){
    for(unsigned long long j=0; j<=9; j++){
      ans[j]+=num[1][i]*pow(10,i-1);
      if(j==num[0][i]){
        ans[j]+=num[2][i]+1;
      }
       if(j<num[0][i]&&j!=0){
        ans[j]+=pow(10,i-1);
      }
    }
  }
   suq=m;
   kk=10;
    le=1;
  while(m/10!=0){
    num1[0][le]=m%10;
    m/=10;
    num1[1][le]=m;
    num1[2][le]=suq-num1[1][le]*kk-num1[0][le]*kk/10;
    le++;
    kk=kk*10;
  }
  num1[0][le]=m;
  num1[1][le]=0;
  num1[2][le]=suq-kk/10*m;
  for(unsigned long long i=1; i<=le; i++){
    for(unsigned long long j=0; j<=9; j++){
      ans1[j]+=num1[1][i]*pow(10,i-1);
      if(j<num1[0][i]&&j>0){
        ans1[j]+=pow(10,i-1);
      }
      if(j==num1[0][i]){ 
        ans1[j]+=num1[2][i]+1;
      }
     
    }
  }
  for(unsigned long long i=1; i<=9; i++){
   op=(op%mod+(ans1[i]-ans[i]+mod*2)%mod*i%mod+mod*2)%mod;
  } 
    op=(op+2*mod)%mod;
  cout<<op%mod<<endl;
}
  return 0;
}
2023/8/9 17:58
加载中...