写在前面
很久没有写过Blog了
csdn都有了好大的变动啊
最近也没做什么大事 但是好颓废呀 最近
NOIp之前的复习提纲变成了考前总结又变成了游记又变成了现在这篇
算了,就从这里开始吧
怀念曾经那个顶着学业压力一个月还可以写31篇博客的我
我
终于
会写对拍了!
其实好久之前老师就讲过 但是我却不以为意
结果NOIp2018 先打了暴力 后来打了个优化但是没有和暴力对拍 结果优化打错了 暴力是对的(而且居然还能A)
然后后悔死了
滚回来在某谷上刷水的时候有个题始终不过 然后就试了一下对拍
虽然写了对拍之后我还是没有找出来这道题的错误 或许是太暴力了
对拍有个bat版本的但是我看不习惯
现就从c++开始吧
还要感谢dalao的帮助
https://blog.csdn.net/c20190102/article/details/60138907
概念
用一个数据生成器生成很多组数据,然后将这些数据分别输入两个程序:一个是效率低但一定正确的,另一个是赛场上要交的程序,比较他们的结果,进行验证。
元素
数据生成器
#include<cstdio>
#include<ctime>//
#include<cstdlib>//
int main()
{
srand(time(NULL));//
int n=rand()%10+1;
int r=rand()%10+1;
int q=rand()%10+1;
printf("%d %d %d\n",n,r,q);
for(int i=1;i<=2*n;i++)
printf("%d ",rand()%10);
puts("");
for(int i=1;i<=2*n;i++)
printf("%d ",rand()%10);
return 0;
}
模板部分加了// (就是照抄的部分)
rand()是随机数 %10保证其为10以内的数
注意printf的格式 空格、换行一定要有
【类比一下手动输入就可以理解了】
正确程序
这个不需要多解释吧
你要交的程序
这个也不需要多解释吧
对排程序
其实也就是模板
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
while(1)
{
system("data.exe > data.txt");
system("1.exe < data.txt > 1.txt");
system("2.exe < data.txt > 2.txt");
if(system("fc 2.txt 1.txt"))
break;
}
system("pause");
return 0;
}
这里的data 1 2都是程序名
data是数据生成器
1 2的顺序其实没有什么影响 只要你知道哪个是哪个就可以了
步骤
- 打好程序
- 将你打的所有的东西放在一个文件夹里面(主要是要让它们的exe在一起)
- 点击对拍程序的exe
- 暗中观察
如果你的程序是对的,就是这样:
如果不对,就是这样:
然后你可以打开它自动生成的txt文件来看数据
诶我要说什么好像忘记了修改你的程序
写在最后
其实还是很简单的对吧
但是要记住啊
话说csdn的代码块怎么变丑了
忆昔午桥桥上饮,坐中多是豪英。
长沟流月去无声。杏花疏影里,吹笛到天明。
二十余年如一梦,此身虽在堪惊。
闲登小阁看新晴。古今多少事,渔唱起三更。