数据生成器 v1.0.0

数据生成器,使生成一道 OI 题目的数据更简单!

文件下载:make_data.exe\texttt{make\_data.exe}

使用方法

编译「标程」和「生成输入数据」的 C++ 代码,将其命名为 std.exe\texttt{std.exe}data.exe\texttt{data.exe}

将上述的两个文件与下载的 make_data.exe\texttt{make\_data.exe} 放在同一目录下,运行 make_data.exe\texttt{make\_data.exe},输入数据组数,即可自动生成数据。

如何编写 std.exe\texttt{std.exe}data.exe\texttt{data.exe} 的 C++ 代码

注意,您需要编写的 C++ 代码均不需要执行文件操作。

对于 std.exe\texttt{std.exe} 的代码,直接编译这道题的 AC 代码即可。

对于 data.exe\texttt{data.exe} 的代码,可通过输出随机数来创建输入数据。

如果在 data.exe\texttt{data.exe} 的代码的编写中,想要知道当前数据的编号,可参考如下代码:

1
2
3
4
5
6
7
8
9
//data.cpp
#include<bits/stdc++.h>
using namespace std;
int main(int argc,char **argv)
{
//此时 argc 是当前数据的编号

return 0;
}

例子:生成 A+B Problem 的数据

假设我们要生成 1010 组数据,前三组数据 a,b103a,b\le 10^3,后七组数据 a,b108a,b \le 10^8

那么,在 std.exe\texttt{std.exe} 的代码中,我们直接放入 AC 代码即可:

1
2
3
4
5
6
7
8
9
10
//std.cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << a + b;
return 0;
}

data.exe\texttt{data.exe} 的代码中,我们要判断当前数据的编号。如果编号 3\le 3,就输出两个 [1,103][1,10^3] 内的随机数。否则输出两个 [1,108][1,10^8] 内的随机数。

1
2
3
4
5
6
7
8
9
10
11
12
13
//data.cpp
#include<bits/stdc++.h>
using namespace std;
mt19937 rnd(chrono::system_clock::now().time_since_epoch().count());
int randint(int l,int r){return rnd() % (r - l + 1) + l;}//生成区间[l,r]内的随机数
int main(int argc,char **argv)
{
if(argc<=3)
cout << randint(1, 1000) << " " << randint(1, 1000);
else
cout << randint(1, 100000000) << " " << randint(1, 100000000);
return 0;
}

将上面两个代码编译,运行 make_data.exe\texttt{make\_data.exe},即可生成 A+B Problem 的数据。

关于这个数据生成器未来的发展方向

我可能会添加生成随机数/随机图等函数。

我也可能设计一个窗口,而不是用 cmd 的方式运行 make_data.exe\texttt{make\_data.exe}

我也会添加一些个性化的东西,供使用者自行设置。


如果在生成数据中,遇到了一些问题,欢迎提出问题或建议!