P2602 [ZJOI2010] 数字计数

原题链接

题解

abcdefg等价于求
a000000+b00000+c0000+d000+e00+f0+g

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll ten[14]={0};
ll f[14]={0};
ll a1[14]={0},a2[14]={0};

void solve1(ll now)
{
    int len=0;
    ll pre=0;
    while(now)
    {
        ++len;
        int top=now%10;
        for(int i=0;i<top;i++)
        {
            a1[i]+=ten[len-1];
            for(int i=0;i<=9;i++) a1[i]+=f[len-1];
        }
        a1[top]+=pre+1;
        pre=top*ten[len-1]+pre;
        now/=10;
    }
    for(int i=len;i>=1;i--)
    {
        a1[0]-=ten[i-1];
    }
}

void solve2(ll now)
{
    int len=0;
    ll pre=0;
    while(now)
    {
        ++len;
        int top=now%10;
        for(int i=0;i<top;i++)
        {
            a2[i]+=ten[len-1];
            for(int i=0;i<=9;i++) a2[i]+=f[len-1];
        }
        a2[top]+=pre+1;
        pre=top*ten[len-1]+pre;
        now/=10;
    }
    for(int i=len;i>=1;i--)
    {
        a2[0]-=ten[i-1];
    }
}
int main()
{
    ten[0]=1;
    for(int i=1;i<=13;i++) ten[i]=ten[i-1]*10LL;
    f[1]=1;
    for(int i=2;i<=13;i++) f[i]=10LL*f[i-1]+ten[i-1];


    ll a,b;
    cin>>a>>b;
    solve1(b);
    solve2(a-1);
    for(int i=0;i<=9;i++) printf("%lld ",a1[i]-a2[i]);
    return 0;
}
posted @   纯粹的  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示