对拍

以前没学过对拍,临近 csp 了才学,记录一下。

1|0对拍:

就是你在 OI 赛制下不确定你的做法是否正确,就可以模拟评测机来检测,如果拍了很久还没出错,大概率不会出错了。

具体的,你有一份你写的程序,你还需要写:

  • 一份保证正确但可能超时的暴力。

  • 一个可以输出随机数据的数据

  • 一个检测程序来检测你写的程序和暴力输出的是否一样。

我们以 a + b 问题举例:

假设我们写了一份代码:

#include <bits/stdc++.h> using namespace std; int main() { int a, b; cin >> a >> b; cout << a + b; return 0; }

我们现在不知道这份代码的正确性,于是我们要写一份暴力:

#include <bits/stdc++.h> using namespace std; int main() { int a, b; cin >> a >> b; for (int i = -100000; i <= 100000; i++) { if (a + b == i) { cout << i << endl; return 0; } } return 0; }

随机数据可以参考网上的。这里给出我的:

#include <bits/stdc++.h> using namespace std; int main() { srand(time(NULL)); // 随机种子 int x = rand() % 1919810 + 1; int y = rand() % 1919810 + 1; cout << x << " " << y << endl; return 0; }

那好,现在只要知道 dubug 程序怎么些就好了。

这里给出模板:

#include <bits/stdc++.h> using namespace std; int main() { while (1) { system("debug.exe > in.txt"); system("1.exe <in.txt > outstd.txt"); system("2.exe < in.txt > outbl.txt"); if (system("fc outstd.txt outbl.txt")) { break; } } return 0; }

其中 debug 是随机数程序,system("debug.exe > in.txt") 的意思是运行 debug 程序造出随机数放入 in.txt 里面。

system("1.exe < in.txt > outstd.txt"); 中的 1 是需要评测的程序,这句话的意思是 1 号程序运行输入 in.txt 里面的东西,把输出的结果放在 outstd.txt 里面。system("2.exe < in.txt > outbl.txt"); 同理。

system("fc outstd.txt outbl.txt") 的意思是:比较 outstd.txtblout.txt 的内容,如果相同返回 0,否则返回 1

但是每次你修改程序后都要运行形成 .exe 后缀的文件,建议你把这四个程序都放在同一个文件夹里。


__EOF__

本文作者ようこそ!
本文链接https://www.cnblogs.com/ydq1101/p/17746223.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ydq1101  阅读(111)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
点击右上角即可分享
微信分享提示