P2395 题解

· · 题解

P2395

本篇题解主要展示一些工程化的写法。

题意

BBCode -> Markdown

分析

字符串大模拟,边读入边处理(流式)。

关于嵌套判断,类括号嵌套可以用栈处理;其余按照题面处理。

Unmatch 和 Unclosed 的区别可以理解为 Unmatch 是栈下溢(Underflow)或栈顶和括号不匹配,Unclosed 是读取完毕后栈喂空。

这题的细节很多,有的时候可能无法理解题面所表达的意思,那么就可以采用“设置”,用 constexpr / 宏控制程序的行为,然后通过调试找到正确的值。

代码

更新:洛谷升级到了 gcc 13,所以不再需要自定义实现的 std::ranges::split_view。代码 643 -> 457 lines。

450+ 行。

https://www.luogu.com.cn/paste/ro2k5zhk

简要概述一下:

其中一小半的代码是一个 ranges::split_view 的自定义实现,因为 gcc 11 的 bug 导致 STL 的无法使用。