1 条题解
-
0
题意分析 题目要求实现一种数字对的压缩表示方法。给定两个数字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
- 上传者