E. Final Countdown

原题链接

题解

本题中,每一位数字的每一次变化都会对答案贡献1,所以对于第 i 位数字而言,它的贡献为从最左边到现在的数,设为 f[i]

所以答案为 i=1nf[i],可以用高精度加法解决
然而这样一来时间复杂度就超了 O(t·n2)

所以我们尝试从中找寻一些规律
我们发现,第 i 的数字会对答案 [1,ni+1] 位上的数字贡献加 s[i]
而我们统计每一位数字又是线性的, 即我们在统计完第 i 位的数字时,还要再统计 ni 个数字
所以我们可以在 O(t·n) 的时间内完成

code

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int a[400005]={0};
        int n;
        cin >> n;
        char s[n+5];
        scanf("%s",s+1);
        int cnt=0;
        for(int i=1;i<=n;i++)
        {
            cnt+=s[i]-'0';
            a[n-i+1]=cnt;
        }

        for(int i=1;i<=n;i++)
        {
            a[i+1]+=a[i]/10;
            a[i]%=10;
        }

        int start=n+1;
        if(a[start])
        {
            while(a[start])
            {
                a[start+1]=a[start]/10;
                a[start]%=10;
                start++;
            }
            start--;
        }
        else
        {
            while(!a[start])start--;
        }
        for(int i=start;i>=1;i--)cout<<a[i];
        puts("");
    }

    return 0;
}

posted @   纯粹的  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示