昨晚参加了一场算法竞赛,尝试用 GPT4 来辅助。记录如下,如果大家有 prompt 方面或者使用方法的建议,欢迎交流。原始记录附在最后。
跟 GPT4 的约定
- 语言的输入输出模板和主程序框架
- 约定提供英文题面,用中文交流
- 要求先交流算法,再生成代码
我的操作流程
- 复制题面,等解答
- 测试 GPT4 提供的代码是否通过样例
- 把我的思考反馈给 GPT4
- 重复2、3步骤直到耐心耗尽
结果

过程
- A题:"Problemsolving Log"
GPT4 直接 AC 的题就这一道。它提供的代码通过样例,我就直接提交了。
- B题:"Preparing for the Contest"
GPT4 对于这题整体的构造思路是对的,但是没有完全理解题意,导致后半部分还是用递增来构造,就出错了。
后来两次做了提示,它都没改对。我就在它第一次的代码上改了一点点就 AC 了。
- C题:"Quests"
GPT4 的第一个思路完全不着边儿,看上去还是没有理解题意。第二个思路接近了一些,主体框架对了,但是忽视了每个阶段都有可能取到最优值的可能。prompt 之后的代码得到了 AC。
- D题:"Three Activities"
GPT4 能够找到没有约数下的最佳方案,但问题的挑战就在于处理避免冲突的约束。由于算法显而易见,我就直接提示了我的思路,GPT4 再次给出的代码获得了 AC。
最终,只有 A、C 和 D 这 3 道题,是完全用 GPT4 的代码通过的题目。
- E2题:"Game with Marbles (Hard Version)"
每回合的选择有一个显而易见的贪心策略,能看出 GPT4 试图找出这个策略,并且很接近。我尝试给它一个有一点点错误的方案,然而它并没有纠正。最后我自己手痒自己上了。
这道题如果给出正确的 prompt,GPT4 应该能写出 AC 的代码。
- F题:"Programming Competition"
GPT4 对这道题的题意理解,或者说对约束的理解有很大问题。中途还提出了二部图这个思路,挺有意思但不能解决本题。我尝试解释为什么不能用二部图,希望能加深它的理解,看上去没什么卵用。
这题我思考也不多,给了它一个简单的贪心思路,它的实现没有问题,但是通过样例的结果,帮我发现了贪心的问题。只将问题跟 GPT4 沟通,它提供的思路大体正确,但是代码实现明显是错的。
觉得实现不是啥挑战了,又不想跟它多费口舌,秉着我行我上的原则,这题我就自己切了。
另外这题涉及到 dfs,之前没跟它约定 py 的 dfs 要用手写栈,于是自己补充了 bootstrap。
- G2题:"Light Bulbs (Hard Version)"
技术题。难题 GPT4 真是无能为力,在怒怼它第一版的瞎扯后(我还真就仔细看了它的思路和代码),第二次给出的思路有点点意思了。但也只是捕捉了最基本的观察,并没有深入思考算法。
沟通的过程中,我大概也有了初步的算法框架。我在它提供的代码上加了几行,能通过样例。但是提交后得到了 WA。
我先把修改后的代码,和 WA 的结果告诉 GPT4,它朦胧地只出了错误可能的方向(没啥具体作用)
自己思考了一阵,找到了 WA 点,但是 GPT4 不能够直接给出正确的代码,此时比赛时间已经临近结束,而且 GPT4 的流量居然也给我跑完了~
最后没来得及完成这题的代码。
体会
优点
- GPT4 的代码风格和命名规范都不错,提供的代码挺容易读懂(即便可能跟它说的思路有出入)。
- 稍微长一点的代码实现的速度比手搓还是快的,一些简单的想法可以让它写出来做实验。
- 当做组队赛里一个菜鸡队友,一边交流一边整理思路还不错。(另一面见缺点3)
缺点
- 并没有等我确认算法后再生成代码,以后在约定中可能要强调这一点。
- 话痨,还是有冗长的表达。
- 打字交流效率低,而且要反复多次沟通才能抓住重点。
- 就算理解了问题的本质,也很难直接给出正确的算法。
优化
- 比赛中意识到直接复制题面的文字贴到 GPT4 中,格式会有问题。后面几道题目略作调整。
- 更完整和全面的 prompt 可能更有效率。(这点希望得到有经验的你指点)
- 如果把 GPT4 当做队友,我应该更有耐心一些。
结论
- 最简单直接的题,如果它不话痨,速度和正确率是不错的。
- 大部分题,反复交流的时间,还不如自己写得快。
- 困难题如果没思路,也许找个无情绪的机器
人交流,也是一种选择。
最后来看看 GPT4 自己的总结:

原始记录