赞
踩
对拍是自我检验程序可行性一个常用途径,掌握对拍方法是每一个竞赛生的最基本的要求。我重点在Windows系统中介绍方法。
对于一个问题,我们想要验证正解的正确性,我们可以:
1.首先我们可以编写一个靠谱的朴素算法,名为BF.cpp,编译运行生成BF.exe
2.然后我们用把自己的正解编写完成,名为Ture.cpp,编译运行生成True.exe
3.我们要编写一个生成随机数据的程序,名为Rand.cpp,编译运行生成Rand.exe
4.在本级目录创建一个名为Data.in的文件,用来让随机数据输出到里面、
5.然后我们再分别创建名为TrueAns.out 和 BF.out的文件,用来让正解和朴素算出的答案输出到里面。
6.再创建一个名为Process.cpp的C++项目,在里面分别调用我们以上创建好的东西
我们先上Process的代码:
- #include<cstdio>
- #include<ctime>
- #include<cstdlib>
- int main(){
- for(int i=1;i<=S;i++){
- system("Rand.exe");
- double start=clock();
- system("True.exe");
- double end=clock();
- system("BF.exe");
- if(system("fc TrueAns.out BFAns.out")){
- puts("Wrong Answer!");
- return 0;
- }
- else{
-
- printf("Accepted! 测试点 %d 用时:%lf",i,end-start);
- }
- }
- return 0;
- }
这里要强调几点:
1.fc是dos系统中的比较指令,能够比较指定两个文件,如果相同就返回0,不相同就返回1。当然我们也可以不需要if语句,它自动会返回比较的结果!
2.system函数的原型在<cstdlib>(<stdlib.h>)头文件里面
3.计算所用的时间,可以时间clock()函数,分别记录时间Start,End,相减即可得出答案
函数原型在<ctime>(<time.h>)头文件中,返回类型为double。
4.BF.cpp,True.cpp记得要freopen,来读写文件,不要输到控制台上,freopen()函数原型在<cstring>头文件中,打开了尽量要关闭,用fclose函数,了解更多freopen的内容,请点击:
freopen函数的详解与应用http://xn--93t021e
5.上述名称都是举例的,可以自定义,但一定要对应
6.由于所有文件都在同一级目录,所以索引就直接写名称加扩展名就可,但一般情况下都是要加上路径的 如:C:\\Program\Rand.exe,而不是Rand.exe
下面我列举了BF.cpp True.cpp的伪代码模板:
Code(True.cpp)
- #include<iostream>
- #include<cstring> //True.cpp
- //Else
- int main(){
- freopen("Data.in","r",stdin);
- freopen("TrueAns","w",stdout);
-
- //Your code
- fclose(stdin);
- fclose(stdout);
- return 0;
- }
Code(BF.cpp)
- #include<iostream>
- #include<cstring>
- //Else
- int main(){
- freopen("Data.in","r",stdin);
- freopen("BFAns","w",stdout);
-
- //Your code
- fclose(stdin);
- fclose(stdout);
- return 0;
- }
如有不懂的地方,欢迎评论,谢谢大家支持!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。