web analytics

通用技术-对拍技术

为什么对拍?

在平时的训练中,我们经常会遇到在OJ上提交WA但是自己却找不出错误的情况,或者是在考试是我们需要确认自己代码的正确性,这时候就要用到对拍这个实用技巧。 对拍,顾名思义,产生一组输入,同时运行无法确认正确性的程序和确认答案正确的程序,并对结果进行比较,以查出错误;

摘自附录[1]编程基础-对拍

对拍会用到代码库

当然如果您直接打#include<bits/stdc++.h>。完全没问题。

PS:cena选手/MacOS 非g++@6.0选手/poj选手 不能用bits/stdc++.h。

之后您需要一个数据生成器,一个对拍器,一段您的代码,一段std(考试的时候多使用暴力).

具体如下:

data.cpp:

shoot.cpp:

注意:在Windows 环境下。system("data>data.in");在命令行中不要加入"./"。但是类Unix\Linux环境下必须加入"./";

 

关于随机数生成:

srand()为给rand()随机数公式里撒种。

rand() 为生成随机数。

因为rand()生成的随机数不是 奥义~真~随机数。

是根据:

这种算法数学上基于X(n+1) = (a * X(n) + c) % m这样的公式,其中:
模m, m > 0
系数a, 0 < a < m
增量c, 0 <= c < m
原始值(种子) 0 <= X(0) < m
其中参数c, m, a比较敏感,或者说直接影响了伪随机数产生的质量。

所以需要撒种。不然数据会一成不变。

 

还有另一种随机数生成:

只适用于高端玩家:

最好的随机算法:mt19937  此算法以包含在C++11中。所以请使用编译器c++11

下面是代码实例(截图来自于前省队Gster提供)

gen

参考文献:

1,编程基础-对拍 http://xqmmcqs.xyz/?p=999

2,rand()算法解释:http://blog.csdn.net/real_myth/article/details/53893854

3,mt19937 文档 http://www.cplusplus.com/reference/random/mt19937/

Post a Comment

You must be logged in to post a comment.