Windows下对拍
What is 对拍
Tool:
- 你的程序
- 可以输出正解的暴力程序
- 数据生成器
- 输出对比器
- RP
用来干什么?
- 用来造数据,检验你的程序的正确性,以方便修改和出现未考虑到的情况
如何工作?
- 数据生成器生成一组数据(据题意输出)
test.in
- 你的程序输入
test.in
运行输出结果 - 暴力程序输入
test.in
运行输出结果 - 输出对比器比较两个程序的输出
- 如果输出不一致就停止
- 手动检查错误
- (被动)
RP--
你的程序:
依照题目做题(前提是你能做出来 😏)
暴力程序:
直接打暴力,不用太多优化 😊 😊
数据生成器:
根据题目输入要求生成数据(不用多说吧?)
好吧,有些重点还是要讲一讲:
随机数据!!!
函数名: rand
功 能: 随机数发生器
用 法: int rand(void);
所在头文件: stdlib.h
cstdlib
函数说明 :
rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。
rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int)。用unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每个数字被选中的机率是相同的。
用户未设定随机数种子时,系统默认的随机数种子为1。
rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它。
函数名: srand
功 能: 初始化随机数发生器
用 法:void srand(unsigned int seed);
所在头文件:stdlib.h
cstdlib
函数说明:
srand()用来设置rand()产生随机数时的随机数种子。
参数seed必须是个整数,通常可以利用time(0)的返回值或NULL来当做seed。
如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
rand()和srand()要一起使用,其中srand()用来初始化随机数种子,rand()用来产生随机数。
因为默认情况下随机数种子为1,而相同的随机数种子产生的随机数是一样的,失去了随机性的意义,所以为使每次得到的随机数不一样,用函数srand()初始化随机数种子。srand()的参数,用time函数值(即当前时间),因为两次调用rand()函数的时间通常是不同的,这样就可以保证随机性了
#include<cstdlib>
#include<ctime>
//获取系统时间需调用time库
#include<iostream>
using namespace std;
int main()
{
srand(time(0));//time(0)获取系统时间
cout<<rand();
return 0;
}
数据对比器:
个人喜好用bat写
diff.bat
:
@echo off
:again
random.exe
my.exe
std.exe
fc my.out std.out
if not errorlevel 1 goto again
pause
random.exe
:数据生成器my.exe
:你的程序std.exe
:暴力程序fc
:cmd下用来比较文件是否相同if not errorlevel 1
:就是如果文件不相同(不必深究)