关于 a+b>b+a 排序条件原因的解释
查看原帖
关于 a+b>b+a 排序条件原因的解释
580708
xun_xun楼主2023/7/20 07:23

首先声明:管理,这不算题解吧,别棕我

发现很多题解没有对 cmp 写法进行合理解释

bool cmp(string a,string b)
{
     return a+b>b+a;
}

我在此解释一下写 a+b>b+aa+b>b+a 的部分改写 a>ba>b 会 WA 的原因吧。

a>ba>b 比较过程的弊端:

在 string 类型字符串比较中是从最高位开始比较,遇到相同的就比较下一位,但也有特殊情况:

比如对于字符串 ABCABC 和 ABCDABCD 字典序的比较,c++会以空('')作为最小字典序。所以前三位相同的情况下,字符串 ABCABC 最后是空,字典序更小,认为 ABC<ABCDABC<ABCD,这就会有问题了。

a>ba>b 比较的问题:

给出样例:

2

1230 123

用眼看就知道答案是 12312301231230 ,但 123123 最后是空,字典序更小,如果只比较 a>ba>b 排序的话,结果将会是 12301231230123,所以就 WA 了。

而如果比较 a+b>b+aa+b>b+a 排序,则两个字符串长度相同,不存在“空”的比较,所以就能 AC 了。

2023/7/20 07:23
加载中...