如何进行对拍

今天我们来学习 对拍 \text{今天我们来学习\Huge\textcolor{green}{{对拍}}} 今天我们来学习对拍

目录

1 . 对拍是什么

2 . 对拍的组成

  • 暴力程序

  • 正解程序

  • 生成程序

  • 对拍程序

3 . 完美的 A C AC AC

1 . 对拍是什么

对拍是一种在 暴力做对,正解不会 的情况下调试正解的方法

2 . 对拍的组成

对拍由 4 4 4 部分组成

暴力程序

在对拍中,暴力程序是最核心的,因为只有暴力 A C AC AC 了,才可以对拍
以下以 P 1001   A + B   P r o b l e m P1001~A + B~Problem P1001 A+B Problem 为例

以下为 P 1001   A + B   P r o b l e m P1001~A + B~Problem P1001 A+B Problem 的暴力程序

#include <bits/stdc++.h>

using namespace std;

#define int long long

signed main()

{

	freopen("in.txt", "r", stdin);

	freopen("暴力.txt", "w", stdout);

	int a, b;

	cin >> a >> b;

	int c = 0;

	for (int i = 1; i <= a; i++) c++;

	for (int i = 1; i <= b; i++) c++;

	cout << c;

	return 0;
}

正解程序

以下为 P 1001   A + B   P r o b l e m P1001~A + B~Problem P1001 A+B Problem 的错误正解程序

#include <bits/stdc++.h>

using namespace std;

#define int long long

signed main()

{

	freopen("in.txt", "r", stdin);

	freopen("正解.txt", "w", stdout);

	int a, b;

	cin >> a >> b;

	cout << a + b + 1;

	return 0;

}

生成程序

生成程序是用来随机生成样例的程序

以下为生成程序

#include <bits/stdc++.h>

using namespace std;

#define int long long

int some(int mod)

{

	//随机生成1到mod间的数

	int s = INT_MAX;

	return s * rand() % mod + 1;

}

signed main()

{

	freopen("in.txt", "w", stdout);

	srand(time(0));

	//使随机更随机

	int a = some(1e6);

	int b = some(1e6);

	cout << a << " " << b;

	return 0;

}

对拍程序

对拍程序通过先运行生成程序,在运行暴力程序和正解程序,并比较运行结果

以下为对拍程序

#include <bits/stdc++.h>

using namespace std;

signed main()

{

	while (1)

	{

		system("生成.exe");

		system("暴力.exe");

		system("正解.exe");

		//运行代码

		if (system("fc 暴力.txt 正解.txt"))

		{

			//比较

			break;

		}

	}

	return 0;

}

运行结果为


3 . 完美的 A C AC AC

不难看出正解比暴力大了 1 1 1 ,所以可以得出正确正解为

#include <bits/stdc++.h>

using namespace std;

#define int long long

signed main()

{

	freopen("in.txt", "r", stdin);

	freopen("正解.txt", "w", stdout);

	int a, b;

	cin >> a >> b;

	cout << a + b ;

	return 0;

}

运行结果…

  • 17
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是指用不同的算法或不同的实现方式,对同一个问题进行多次求解,并比较结果是否一致的过程。对可以帮助我们验证算法的正确性和效率。 下面是在 Linux 下进行的简单教程: 1. 编写暴力算法和优化算法的代码,并分别编译生成可执行文件。 2. 编写一个随机数据生成器的代码,并编译生成可执行文件。 3. 编写一个脚本文件,用于自动执行对过程。 4. 在脚本文件中,先执行随机数据生成器,将生成的数据保存到文件中。 5. 然后分别执行暴力算法和优化算法,将结果保存到不同的文件中。 6. 最后使用 diff 命令比较两个结果文件是否一致。 下面是一个简单的脚本文件示例: ```bash #!/bin/bash for ((i=1;i<=10;i++)) do ./data_generator > input.txt ./brute_force < input.txt > bf_output.txt ./optimized_solution < input.txt > opt_output.txt if diff bf_output.txt opt_output.txt >/dev/null ; then echo "Test case $i: PASSED" else echo "Test case $i: FAILED" exit 1 fi done echo "All test cases PASSED" exit 0 ``` 这个脚本文件会执行 10 次对,每次生成随机数据,然后分别执行暴力算法和优化算法,最后使用 diff 命令比较两个结果文件是否一致。如果两个结果文件一致,则输出 "PASSED",否则输出 "FAILED" 并退出程序。如果所有测试用例都通过,则输出 "All test cases PASSED"。 以上是在 Linux 下进行的简单教程,希望对你有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值