关于 对拍 的一些认识
Posted wljss
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 对拍 的一些认识相关的知识,希望对你有一定的参考价值。
对拍是用来检验自己写的正解的正确性&效率的东西。
操作说明:
1.准备好自己写的暴力(b.cpp 和 b.exe)和正解(z.cpp 和 z.exe)。
2.写一个造数据的程序(shuju.cpp 和 shuju.exe),根据题目要求自己造。
3.写一个对拍程序(duipai.cpp 和 duipai.exe),大部分情况下不用改动,如下.
#include<bits/stdc++.h>
using namespace std;
long long i;
int main()
{
while(1)
{
system("shuju.exe > shuju.txt");
double t1=clock();
system("b.exe < shuju.txt > b.txt");
double t2=clock();
system("z.exe < shuju.txt > z.txt");
double t3=clock();
if(system("fc b.txt z.txt"))break;
cout<<"AC: "<<++i<<" "<<t2-t1<<" "<<t3-t2<<<endl;
}
return 0;
}
注意要将上面那些东西放到同一个目录下。
4.运行duipai.exe.
下面举一个简单的例子,以a*b problem为例。
z.cpp
#include<bits/stdc++.h>
using namespace std;
long long a,b;
int main()
{
cin>>a>>b;
cout<<a*b;
return 0;
}
b.cpp
#include<bits/stdc++.h>
using namespace std;
int a,b,ans;
int main()
{
cin>>a>>b;
for(int i=0;i<=b;++i)ans+=a;
cout<<ans;
return 0;
}
duipai.cpp
```cpp
#include<bits/stdc++.h>
using namespace std;
long long i;
int main()
{
while(1)
{
system("shuju.exe > shuju.txt");
double t1=clock();
system("b.exe < shuju.txt > b.txt");
double t2=clock();
system("z.exe < shuju.txt > z.txt");
double t3=clock();
if(system("fc b.txt z.txt"))break;
cout<<"AC: "<<++i<<" "<<t2-t1<<" "<<t3-t2<<<endl;
}
return 0;
}
注意事项:
1.4个程序都要放到同一个目录下
2.对拍的文件名不要取名fc
3.windows下和linux下生成的随机数范围不一样
4.生成数据的文件不要忘记写srand(time(0))
以上是关于关于 对拍 的一些认识的主要内容,如果未能解决你的问题,请参考以下文章