(发现一年没发帖了,趁没课水几个小学期的帖子)
由于某题莫名卡住,多次debug、试遍乐学的所有用例,依然没有找到自己的算法错误,又莫名其妙地wa,我学习了一下编程竞赛中常用的判断错误方法:对拍。
对拍,顾名思义,就是对照试验。将相同的数据分别输入到你的程序和“正确的程序”,自动对比在两个程序中产生的输出是否相同。
其中,数据可以通过编程,利用rand函数,随机生成许多用例,从而涵盖用例的多种情况。
其中“正确的程序”,在真正的算法竞赛中可以运用暴力算法写出输出没有问题但可能超时的程序,由于本次是线下作业,所以借用了同学已经AC的代码作为参照。
然后我们来说一下如何对拍:
你需要四个文件:①WA.cpp,也就是你的程序
②AC.cpp,也就是可以AC的程序
③makeData.cpp,也就是可以输出一组随机用例的程序
④Check.cpp,也就是编译运行可以鉴定两组输出是否相同的程序
https://blog.csdn.net/Njhemu/article/details/99539576对拍程序可以参考这个链接
步骤:
① 修改Check.cpp,使之满足你的程序和输入输出。
② 修改makeData.cpp,在main函数开头插入如下内容:
③ 修改AC.cpp和WA.cpp,在main函数开头插入如下内容:
注意其中stdin的文件名要和makeData.cpp的stdout相同
④ 编译这四个文件,运行Check.exe,结果如下:
诡异的是,对拍一直no error,OJ却一直过不了啊!(摔)大概是用例生成器生成的数据不全面吧……