对拍在考试时主要干的事就是对比 一定对但是暴力 和 似乎正解但不一定对 的两个程序的输出,来帮助检验自己的程序是否确实没有问题,减少挂分的发生
一般需要这几个东西:
不管 .in .out 和程序啥的,需要自己写的是这几个 .cpp 文件
建议专门开一个文件夹来存,比较方便
(此处各种命名只是个人习惯)
- my.cpp 用来存自己需要检验正确性的程序
- bl.cpp 暴力,需要保证一定对
- mkd.cpp 随机数据生成器
- pai.cpp 控制对拍过程
例:
noip模拟5 string 一题,可以用 sort 暴力和自己的其他想法对拍
mkd.cpp:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline int rd(int x){ return 1ll*rand()*rand()%x; }
int n,m;
int main(){//按题意造数据
srand(time(NULL));
n=10; m=10;
cout<<n<<' '<<m<<endl;
for(int i=1;i<=n;i++)putchar('a'+rd(26)); puts("");
for(int i=1;i<=m;i++){
int a=rd(n)+1,b=rd(n)+1;
if(a>b)swap(a,b);
cout<<a<<' '<<b<<' '<<rd(2)<<endl;
}
return 0;
}
pai.cpp:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
system("g++ my.cpp -o my");
system("g++ bl.cpp -std=c++11 -O2 -o bl");
system("g++ mkd.cpp -o mkd");
//编译你的代码
int T=0;
while(++T){
system("./mkd>in.in");
system("./my<in.in>my.out");
system("./bl<in.in>bl.out");
//运行
// "<in.in" 为从 in.in 读入
// ">my.out" 为输出到 my.out
if(system("diff my.out bl.out")){//判断是否正确
puts("QAQ"); break;
}
else printf("OK %d
",T);
}
return 0;
}
基本就是这样,平时也可以刷题时不时拍拍,练下造数据啥的qwq