摘要: 问题来自 P1902 刺杀大使,在最初的实现中 DFS 中一段代码如下: visited[x2][y2] = true; flag = dfs(v, x2, y2); visited[x2][y2] = false; if (flag) { break; } 从格点([x2][y2]) 出发进行搜索 阅读全文
posted @ 2023-03-06 21:52 Revc 阅读(86) 评论(0) 推荐(0) 编辑
摘要: 画出算法的演示图,展现算法对某个实例详细的执行过程,可以很清晰地把算法写下来。 注意以下的几点: 实例的规模应该尽可能小,便于人工分析算法的执行过程; 实例应该尽可能包含各种特殊情况,以确保跟着演示图编写的代码也会考虑到这些特殊情况; 演示图应当简单、简洁、清晰。 通过参考这篇快速排序的博客(排序算 阅读全文
posted @ 2023-03-06 20:25 Revc 阅读(58) 评论(0) 推荐(0) 编辑
摘要: 单个跑正常,多个跑异常;因为上一个测试的输入内容还没有被读完就 goto/break/continue 了。 这种情况,需要读取上一个输入中剩余的部分。 例子: std::getline(std::cin, s); // read the leftovers 问题来源:https://www.luo 阅读全文
posted @ 2023-03-06 20:20 Revc 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 这两种写法效率依赖处理器、编译器和标准库。一般来说循环内的重复操作的性能差于循环外的单次操作。 参考文献 Which is more efficient to use in a for loop, i<sqrt(n) or i*i<(n)? 阅读全文
posted @ 2023-03-06 19:21 Revc 阅读(45) 评论(0) 推荐(0) 编辑
摘要: true == 1; true + 1; If the destination type is bool, see 4.12. If the source type is bool, the value false is converted to zero and the value true is 阅读全文
posted @ 2023-03-06 19:04 Revc 阅读(33) 评论(0) 推荐(0) 编辑
摘要: for (int i = 0; i < buildings.size(); i++) {} 和 int n = buildings.size(); for (int i = 0; i < n; i++) {} 之间的效率差距如何? 通常 size() 函数的调用会被编译器内联,可能会有些许性能损失, 阅读全文
posted @ 2023-03-06 18:51 Revc 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 如果英文字符串只使用空格作为分隔符,在进行全词匹配时,可以为搜索内容前后加上空格,再进行搜索。 参考资料 题解 P1308 【统计单词数】 阅读全文
posted @ 2023-03-05 22:54 Revc 阅读(47) 评论(0) 推荐(0) 编辑
摘要: 如果存在如下的输入, 11 is a prime 考虑如下的程序, std::cin>>number; std::getline(std::cin,input) std::cin 在读取数字 11 时,没有读取 11 后面的换行符。这个换行符被之后的 std::getline 消耗了,从而导致 st 阅读全文
posted @ 2023-03-05 22:49 Revc 阅读(106) 评论(0) 推荐(0) 编辑
摘要: C 语言中的 % 是余数操作符,而==不是==模数操作符。 模数被定义为 k := n - d*q,q 是一个整数使得 k 的符号和 d 的符号一致,同时使得 k 的绝对值尽可能的小。 余数被定义为 k := n - (n/d)*d,k 的符号和 n 一致。 参考资料 Remainder Modul 阅读全文
posted @ 2023-03-05 22:38 Revc 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 使用如下代码来获取数字的每一位, while(n > 0) { digits[d++] = n % 10; n /= 10; } 需要注意一点,digits 数组中保存的位的顺序和字数本身的顺序相反。如数字 1234 会被保存为 |4|3|2|1|。 阅读全文
posted @ 2023-03-05 22:20 Revc 阅读(37) 评论(0) 推荐(0) 编辑