主要观点:Codeforces 存在随机导致代码变慢 100 倍并超时的慢动作 bug,疑似微软 C 运行时函数实现不佳所致,与选手代码无关。文中提供了一种缓解方法,即通过调用 Windows API 函数替代 C 库的内存分配函数来重写代码,如添加#include <windows.h>
及相关new
和delete
函数重载,但无法确定此方法是否能解决问题。同时讨论了关于利用该 bug 进行 hack 的问题,认为这不公平,希望尽快部署补丁。作者表示未来 6 个月不再接触 Windows 或 PE 相关内容。
关键信息:
- 存在随机 TLE 的 bug,改变代码某些部分可能导致代码变慢 100 倍。
- 怀疑是微软 C 运行时函数实现问题,Codeforces 运行在 Windows 上使用微软 C 库。
- 提供的缓解方法是用 Windows API 函数替代 C 库的内存分配函数。
- 讨论了利用该 bug 进行 hack 的公平性问题。
重要细节: - 示例代码展示了 bug 的表现,如一个包含
vector<vector<int>>
的循环代码在特定条件下变慢。 - 调查过程中发现与 28 字节的分配相关,推测与内存分配算法有关。
- 研究了不同 C 库(UCRT 和 MSVCRT)的源代码及相关函数实现。
- 确认 Codeforces 的 C++20(64)使用 WinLibs 且使用 MSVCRT 的
malloc
。 - 提出可能的修复方案,如替换为其他内存管理库或使用 UCRT 或 GNU libc。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。