对拍

写在前面

很久没有写过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的代码块怎么变丑了


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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值