本题虽然说给定了l1,r1,l2,r2,让从两个区间各选一个数,使加和的数位和最大,这个题等价于从l=l1+l2到r=r1+r2选择一个数使其数位和最大。最大的数取决于r值,让r的后面几位是九就是这个题的思路。例如,r=14783,如果后四位是9,则为9999,后三位为九,则为13999,后两位为九,则为14699,最后一位为九,则为14779,在和r本身一起(极端情况,如r=99999),看谁的数位和最大。(注意:如果l,r数位不等的话可以忽略l,l的长度变为r的长度,然后l都为零就可以了,如果r的某一位是零,则跳过“后缀变成九”的部分)

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
    int T;
    cin>>T;
    while(T--) 
    {
        int l1,r1,l2,r2;cin>>l1>>r1>>l2>>r2;
        int l=l1+l2,r=r1+r2;
        string sl=to_string(l);
        string sr=to_string(r);
        int lenl=sl.size(),lenr=sr.size();
        int ans=0,res=0;
        if(lenl!=lenr)sl.assign(lenr,'0'); 
        for(int i=0;i<lenr;i++)
        {
             if(sl[i]<sr[i])
             {
                 int tmp=(lenr-(i+1))*9+(sr[i]-'0'-1)+res;//后面是9,加上自身减一,加上前面
                 ans=max(ans,tmp);
             }
             res+=sr[i]-'0';
        }
        ans=max(ans,res);
        cout<<ans<<endl;
    }
    return 0;
}