对拍
写在前面
“出关”之后的第一篇博客
****都有了好大的变动啊
最近也没做什么大事 但是好颓废呀 最近
有很多想法却没有付诸行动 想去另外搭一个博客 然后搭到一半就跑了
NOIp之前的复习提纲变成了考前总结又变成了游记又变成了现在这篇
算了,就从这里开始吧
怀念曾经那个顶着学业压力一个月还可以写31篇博客的我
我
终于
会写对拍了!
其实好久之前老师就讲过 但是我却不以为意
知道NOIp2018 与1=擦肩而过
然后后悔死了
滚回来在某谷上刷水的时候有个题始终不过 然后就试了一下对拍虽然写了对拍之后我还是没有找出来这道题的错误 或许是太暴力了
对拍有个bat版本的但是我看不习惯
现就从c++开始吧
还要感谢dalao的帮助
https://blog.****.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文件来看数据
-
诶我要说什么好像忘记了修改你的程序
写在最后
其实还是很简单的对吧
但是要记住啊
话说****的代码块怎么变丑了
忆昔午桥桥上饮,坐中多是豪英。
长沟流月去无声。杏花疏影里,吹笛到天明。
二十余年如一梦,此身虽在堪惊。
闲登小阁看新晴。古今多少事,渔唱起三更。