数据生成器,使生成一道 OI 题目的数据更简单!
文件下载:make_data.exe。
使用方法
编译「标程」和「生成输入数据」的 C++ 代码,将其命名为 std.exe 和 data.exe。
将上述的两个文件与下载的 make_data.exe 放在同一目录下,运行 make_data.exe,输入数据组数,即可自动生成数据。
如何编写 std.exe 和 data.exe 的 C++ 代码
注意,您需要编写的 C++ 代码均不需要执行文件操作。
对于 std.exe 的代码,直接编译这道题的 AC 代码即可。
对于 data.exe 的代码,可通过输出随机数来创建输入数据。
如果在 data.exe 的代码的编写中,想要知道当前数据的编号,可参考如下代码:
1 2 3 4 5 6 7 8 9
| #include<bits/stdc++.h> using namespace std; int main(int argc,char **argv) { return 0; }
|
例子:生成 A+B Problem 的数据
假设我们要生成 10 组数据,前三组数据 a,b≤103,后七组数据 a,b≤108。
那么,在 std.exe 的代码中,我们直接放入 AC 代码即可:
1 2 3 4 5 6 7 8 9 10
| #include<bits/stdc++.h> using namespace std; int main() { int a, b; cin >> a >> b; cout << a + b; return 0; }
|
在 data.exe 的代码中,我们要判断当前数据的编号。如果编号 ≤3,就输出两个 [1,103] 内的随机数。否则输出两个 [1,108] 内的随机数。
1 2 3 4 5 6 7 8 9 10 11 12 13
| #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;} 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,即可生成 A+B Problem 的数据。
关于这个数据生成器未来的发展方向
我可能会添加生成随机数/随机图等函数。
我也可能设计一个窗口,而不是用 cmd 的方式运行 make_data.exe。
我也会添加一些个性化的东西,供使用者自行设置。
如果在生成数据中,遇到了一些问题,欢迎提出问题或建议!