把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

对拍

写在前面

很久没有写过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的顺序其实没有什么影响 只要你知道哪个是哪个就可以了

步骤

  1. 打好程序
  2. 将你打的所有的东西放在一个文件夹里面(主要是要让它们的exe在一起)
  3. 点击对拍程序的exe
  4. 暗中观察
    如果你的程序是对的,就是这样:

如果不对,就是这样:

然后你可以打开它自动生成的txt文件来看数据

  1. 诶我要说什么好像忘记了 修改你的程序

写在最后

其实还是很简单的对吧
但是要记住啊
话说csdn的代码块怎么变丑了


忆昔午桥桥上饮,坐中多是豪英。
长沟流月去无声。杏花疏影里,吹笛到天明。
二十余年如一梦,此身虽在堪惊。
闲登小阁看新晴。古今多少事,渔唱起三更。

posted @ 2018-12-06 13:59  Starlight_Glimmer  阅读(7)  评论(0编辑  收藏  举报  来源
浏览器标题切换
浏览器标题切换end