首页 理论教育 在Windows系统下C++语言中学版对拍技巧分享

在Windows系统下C++语言中学版对拍技巧分享

时间:2023-08-13 理论教育 版权反馈
【摘要】:图15-46在“查看”菜单里,勾选“文件扩展名”将“对拍.txt”文件格式由“.txt”改为“.bat”,变成“对拍.bat”,图标变为。图15-48对拍批处理程序运行结果对拍结束后文件夹中会多出三个文件,其中data.in中保存的是数据生成器生成并输入测试的数据,ZhengJie.out、BaoLi.out保存的是对拍过程中两份代码的输出。图15-49对拍文件执行后状态需要注意的是,例15.1只是提供了一种可以使用的批处理程序代码,程序代码还有很多其他的写法。

在Windows系统下C++语言中学版对拍技巧分享

1.准备对拍代码

第一步是写好两份代码,一份是针对于此题编写的答案代码,只是对于题目提供的样例能够通过,不能确定其正确性。另一份是暴力代码,此代码在一定数据范围内完全正确,但时间复杂度过高不符合题目要求。这是对拍的第一个难点,选手必须能写出一份完全正确的暴力代码,并且明确保证暴力代码正确的数据范围。以此题为例,正解为前缀和,暴力做法为直接用循环求x到y的和。两种代码如下。

1)正解前缀和代码

2)暴力求解代码

2.编写数据生成器代码

接下来需要编写一个数据生成器的代码,用来生成多组测试数据,这是对拍的第二个难点。对于不同的题目,输入数据的格式和要求是不同的。例15-1的数据只是单纯的整数,比较简单。但是NOIP以上级别竞赛难度的题目要求都是较复杂的,常常需要生成树和图等复杂的数据结构,编写生成数据的程序对选手水平有非常高的要求。

在生成数据时,rand()函数常用于生成随机数,但是要注意的是,rand()函数并不是真正的随机,也就是说多次随机生成的数可能是完全相同的。为了生成真正的随机数,可以令随机数的值和时间相关,加入srand(time(NULL))语句即可。

例15-2 生成数据的代码文件命名为“MakeDate”,代码如下:

3.进行对拍

操作步骤如下:

(1)对ZhengJie.cpp、BaoLi.cpp、MakeDate.cpp进行编译,得到ZhengJie.exe、BaoLi.exe、MakeDate.exe三个可执行文件。(www.xing528.com)

(2)编写批处理脚本。先创建一个文本(.txt)文件,命名为“对拍.txt”。输入下面的例15-2批处理代码,保存并关闭文件。

例15-2的批处理代码

(3)在“对拍.txt”文件所在的文件夹里,单击“查看”菜单,勾选“文件扩展名”选项,如图15-46所示。

图15-46 在“查看”菜单里,勾选“文件扩展名”

(4)将“对拍.txt”文件格式由“.txt”改为“.bat”,变成“对拍.bat”,图标变为。再将ZhengJie.exe、BaoLi.exe、MakeDate.exe和对拍.bat四个文件保存在同一文件夹内,如图15-47所示。

图15-47 对拍文件执行前状态

(5)双击执行这个文件夹里的“对拍.bat”文件,出现黑屏将陆续显示对拍的过程和比较的结果,直到比较完全部数据后结束。例15-2提供的两份代码,对拍结果显示均为无差异,如图15-48所示。如果对拍时出现不同结果,会显示不一致的内容并停止执行。请注意:对拍的过程有时可能会很漫长。

图15-48 对拍批处理程序运行结果

对拍结束后文件夹中会多出三个文件,其中data.in中保存的是数据生成器生成并输入测试的数据,ZhengJie.out、BaoLi.out保存的是对拍过程中两份代码的输出。如图15-49所示。

图15-49 对拍文件执行后状态

需要注意的是,例15.1只是提供了一种可以使用的批处理程序代码,程序代码还有很多其他的写法。也可以不使用批处理的方法,直接用C++语言编写,读者可以自行查找相关方法。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈