对拍器/对数器 赛前抱佛脚

“对拍器/对数器的使用前提是该题你会暴力解法,如果不会,那么对拍器/对数器也没啥用。”


对拍器/对数器

应用背景

你有一个绝对对的暴力cpp代码,但时间会T,只适用于小范围的数据。所以你写了一个聪明的非暴力cpp代码,但是不知道对不对。

如果非暴力代码是对的,那么在同一份数据上,非暴力代码和暴力代码的结果应该是一样的。根据这个我们就需要一个随机生成数据的mkd.cpp代码了。

工作流程

你手上有三份cpp文件:

std.cpp(非暴力代码)

bl.cpp(暴力代码)

mkd.cpp(随机数据生成代码)

流程为:

mkd生成一份数据A分别输入到std.cpp和bl.cpp中,得到两份输出B和C。对比B和C,如果B和C不一样,那么就查看数据A是什么样子的,然后根据数据A改进std.cpp代码。


实操代码

实操背景:如果这个数是奇数就输出它。

bl.cpp

#include <bits/stdc++.h>

using namespace std;

int main(int argc, char** argv) {
	int n = 10;
	int temp = 0;
	while(n--)
	{
		cin>>temp;
		if(temp&1)
		cout<<temp<<" ";
	}
	cout<<endl;
	return 0;
}

std.cpp

#include <bits/stdc++.h>
using namespace std;
 
int main(int argc, char** argv) {
	std::ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	srand(time(0));
	int n = 10;
	int temp = 0;
	while(n--)
	{
		cin>>temp;
		if(temp&1)
		cout<<temp<<" ";
	}
	if(rand()%3==0)
		cout<<"x"<<" ";
// 模拟出错
	cout<<endl;
	return 0;
}

mkd.cpp

#include <bits/stdc++.h>

using namespace std;


int main() {
	const int n = 10;
	srand(time(0));
	int a[n]={0};
	for(int i = 0;i<n;i++)
		a[i] = i;
	random_shuffle(a,a+n); 
	for(int i = 0;i<n;i++)
		cout<<a[i]<<" ";
	cout<<endl;
	return 0;
}

test.bat

g++ std.cpp -o std -g
g++ bl.cpp -o bl -g
g++ mkd.cpp -o mkd -g
:loop
mkd.exe>1.txt
std.exe<1.txt>2.txt
bl.exe<1.txt>3.txt
fc 2.txt 3.txt
if not errorlevel 1 goto loop
pause
goto loop

 mkd.exe>1.txt 的意思是把mkd.exe的控制台输出写入到1.txt文件中

std.exe<1.txt>2.txt的意思是1.txt作为std.exe的输入,然后再把输出写入到2.txt中

fc 2.txt 3.txt 比较2.txt和3.txt是否一致

手动点击test.bat文件,它就会快速运行,直到出现2.txt与3.txt的内容不同,这时候mkd会停止生成数据,此时就可以查看1.txt里面的数据,就是std.cpp的WA数据。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HUTAC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值