社区讨论
关于 try catch 在 oi 中的应用
P3953[NOIP 2017 提高组] 逛公园参与者 8已保存回复 10
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 10 条
- 当前快照
- 1 份
- 快照标识符
- @lo12qbmt
- 此快照首次捕获于
- 2023/10/22 14:14 2 年前
- 此快照最后确认于
- 2023/11/02 13:43 2 年前
我以为是 c++ 语言基础,做这题的时候看到题解代码发现大家都不用,我普及一下。
这题多组数据,如果有长度为 0 的环并且在 dfs 中找到就输出 -1。
如果没有多组数据,那可以
CPPvoid dfs(...) {
...
puts("-1");
exit(0);
...
}
遗憾的,这题有多组数据 所以可以这么写
CPPvoid dfs(...) {
...
puts("-1");
throw -1;
...
}
int main() {
...
while (T--) {
...
try {
for (int i = 0; i <= k; i++) {
(ans += dfs(n, i)) %= p;
}
printf("%d\n", ans);
} catch (int exception) {
assert(exception == -1);
puts("-1");
}
}
...
}
throw -1 之后,会在递归栈里一路往上找到一个符合条件的 catch 代码块,所以这些 dfs 都自动退出了,然后执行 main 里的 puts("-1");。如果不这么写,可能要让 dfs 的返回值变成 -1,然后在每次递归的时候都判断一下返回值有没有 -1,有的话继续返回 -1。
用 try catch throw 写控制流应该还是挺方便的。
回复
共 10 条回复,欢迎继续交流。
正在加载回复...