1 条题解

  • 0
    @ 2025-4-8 12:56:53

    题意分析 题目要求实现一种数字对的压缩表示方法。给定两个数字F和R(F < R),我们需要将R压缩成C,使得:

    C的位数尽可能少

    可以根据F和C还原出R

    遵循特定的压缩/解压规则

    思路分析 数字压缩原理: 通过比较F和R的最低有效数字(LSD)来找到最短的C表示,C的位数决定了如何从F和C重建R

    关键步骤:

    从1位开始尝试,逐步增加C的位数

    对于每个位数d:

    计算R的最后d位作为候选C

    根据压缩规则验证是否能从F和C重建R

    找到最小的d使得重建的R等于原始R

    压缩规则应用:

    如果C > F,直接使用C

    如果C ≤ F:

    比较F和C的LSD

    根据比较结果决定如何组合MSD和C

    参考代码:

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cctype>
    using namespace std;
    typedef long long ll;
    char fmt[]="%lld-%000lld\n";
    int main(){
        ll a,b;
        while(scanf("%lld-%lld",&a,&b)!=EOF){
            ll d=0,n=1,r=-1;
            while(b!=r){
                d+=1;
                n*=10;
                if(b%n<=a%n){
                    r=a/n*n+n+b%n;
                } else {
                    r=a/n*n+b%n;
                }
            }
            fmt[7]='0'+d/10;
            fmt[8]='0'+d%10;
            printf(fmt,a,b%n);
        }
        return 0;
    }
    • 1

    信息

    ID
    1320
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者