反转求最大

Digital Folding

https://ac.nowcoder.com/acm/contest/120561/G

链接:https://ac.nowcoder.com/acm/contest/120561/G
来源:牛客网
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

void deal()
{
    string l, r;
    cin >> l >> r;
    
    int l_length = l.length(), r_length = r.length();
    string pd = "1";
    for(int i = 1; i <= r_length -1; i++) pd += "0";
     
    //1. 如果r == 10000....00
    if(r == pd){
        if(l == r) {cout << '1' << endl; return ;}
        else{
            for(int i = 0; i < r_length - 1; ++i)
                cout << "9";
            cout << endl;
            return;
        }
        
    }
    // 统一位数       
    if(l_length < r_length){
        l = pd;
        l[r_length - 1] = '1';
    }
    
    // 2. 其他情况
    string ans = "";
    int s;
    for(int i = 0; i < r_length; i++){
        if(l[i] != r[i]){
            ans += char((int)r[i] - 1);
            s = r_length - i - 1;
            break;
        }
        else ans += r[i];
    }
    for(int i = 0; i < s; ++i)
        ans += "9";

    reverse(ans.begin(),ans.end());
    reverse(r.begin(),r.end());
    ans = max(ans,r);
    long res = stoll(ans); // 将string转换为long类型 防止”0001145454“ 等这这种出现前导0的情况
    cout << res << endl;
}

int main()
{
    int T;
    cin >> T;
    while(T--){
        deal();
    }
    return 0;
}
该题的两种主要特例判断:
1.  如果r = 100000...000:
                a.    如果这时 l = r = 100000...00 说明只能进行这一个数字的反转 结果得到1。
                b.    如果 l < r 此时   r = 10000...00 这是只要把 r - 1 得到比原来少一位的 99999..99 ,这个就是结果。 


2. 其他:
    如果l 的位数小于r 的位数,此时可以让l 变为1000...001 与r的位数相同(因为得到的最终结果的位数只会跟r的相同)。之后从左向右遍历l和r,找到第k个 ,使l[k] != r[k],这是将r[k] - 1并将k之后的数都置为9 。


之后将前面l 和r 相同的数跟后面变成9的数存到ans 中 之后将ans 反转与r反转,求出两者中较大的一个(因为当l[k] != r[k]时候,r[k]可能等于 9 这时候就不需要将r[k] - 1 ,只要将r反转就可以得到最大的结果)。

















全部评论

相关推荐

在喝茶的杨桃很郁闷:我简单喵两句: 1.如果不是实在没东西写不要写熟悉async await这些语法层面的东西 2.也不要写熟悉HTTP,因为http内容很多,稍微深挖一点你不会的话会让人有一种“原来你简历上面的东西都没有完全掌握”的感觉,容易给自己挖坑 3.自我评价可以删了 4.我在复习明天的面试,先mark,后面再回来继续建议
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务