1 条题解

  • 0
    @ 2026-5-3 19:18:50

    思路

    设三串数字为 abca、b、c,那么 nowinow_iai+bia_i+b_i

    对于 ai+bia_i+b_i 有两种情况,要么是不进位要么是进位。

    此时我们发现:对于每个合法区间 (l,r)(l,r)l,rl,r 之间的每一位都是情况 1 或情况 2,且第 ll 位一定不会进位,第 rr 位一定是情况 2。

    最后要注意处理前一位没有进位时如果 nowinow_i99 要做进位处理。

    Code

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    string a,b,c;
    int ans,w,s;
    signed main(){
        cin>>a>>b>>c;
        for(int i=a.size()-1;i>=0;--i){
            int now=a[i]-'0'+b[i]-'0',h=c[i]-'0';
            if(now>=10||(now==9&&w==1&&h==0)){
                if(now%10==h){
                    if(w==1){
                        s=1;
                    }
                    else{
                        ++s;
                    }
                    w=1;
                }
                else if((now+1)%10==h&&w==1){
                    w=1;
                }
                else{
                    s=0;
                    w=0;
                }
            }
            else{
                if(now%10==h){
                    if(w==1){
                        s=1;
                        ans+=s;
                    }
                    else{
                        ++s;
                        ans+=s;
                    }
                    w=0;
                }
                else if((now+1)%10==h&&w==1)
                {
                    ans+=s;
                    w=0;
                }
                else
                {
                    s=0;
                    w=0;
                }
            }
        }
        printf("%lld",ans);
        return 0;
    }
    

    结语

    感谢大家的观看和管理员的审核,祝大家在算法竞赛的道路上越走越远!

    • 1

    信息

    ID
    11493
    时间
    2000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者