2 条题解

  • 1
    @ 2025-7-8 16:49:18

    数位dp

    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e5+5;
    long long a,b,numa[10],numb[10],pow10[N],dp[N];
    void init(){
    	pow10[0]=1;
    	for(int i=1;i<=12;i++){
    		dp[i]=dp[i-1]*10+pow10[i-1];
    		pow10[i]=pow10[i-1]*10;
    	}
    }void solve(long long n,long long *ans){
    	int len=0,tmp[15];
    	while(n){
    		tmp[++len]=n%10;
    		n/=10;
    	}for(int i=len;i>=1;i--){
    		for(int j=0;j<=9;j++){
    			ans[j]+=dp[i-1]*tmp[i];
    		}for(int j=0;j<tmp[i];j++){
    			ans[j]+=pow10[i-1];
    		}long long t=0;
    		for(int j=i-1;j>=1;j--){
    			t=t*10+tmp[j];
    		}ans[tmp[i]]+=t+1;
    		ans[0]-=pow10[i-1];
    	}
    }
    int main(){
    	cin>>a>>b;
    	init();
    	solve(a-1,numa);
    	solve(b,numb);
    	for(int i=0;i<=9;i++){
    		cout<<numb[i]-numa[i]<<" "; 
    	}
    }
    
    

    信息

    ID
    485
    时间
    1000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    52
    已通过
    1
    上传者