本题 y 数组需要开二倍的吧?

P3809 【模板】后缀排序

将代码: ```cpp if(y[sa[i]]==y[sa[i-1]]&&y[sa[i]+k]==y[sa[i-1]+k]) ``` 改成: ```cpp if(y[sa[i]+k]==y[sa[i-1]+k]&&y[sa[i]]==y[sa[i-1]]) ``` 也是对的。
by 翼德天尊 @ 2024-01-15 18:52:22


第一种完全正确,第二种基于 UB。
by sqrtDataStructure @ 2024-01-15 19:03:22


你可以使用 sanitizer 检测。
by sqrtDataStructure @ 2024-01-15 19:03:48


@[翼德天尊](/user/257621) 第一种写法是对的,因为如果 `sa[i]+k` 或 `sa[i-1]+k` 有一个大于 `n+1` 了那么这个 `==` 是必不成立的,不会执行第二个判断
by 耳朵龙_ @ 2024-01-15 19:05:28


@[sqrtDataStructure](/user/484006) @[耳朵龙_](/user/427828) 哦哦哦确实,谢谢捏
by 翼德天尊 @ 2024-01-15 19:18:15


@[sqrtDataStructure](/user/484006) 哪个东西啊?
by stOtue @ 2024-02-13 18:42:30


|