现在已经是 $2025$ 年了,居然还有人不会造数据?!
本文将详细介绍我在 C++ 中常用的数据生成方法,并提供完整教程和示例代码。
代码(是 Zip 压缩包)
以下内容以生成 P1001 A+B Problem 的数据为例。
请打开文件“生成输入数据程序.cpp”。
将代码中的 string
类型常量 NAME
赋值为题目编号 P1001
。
以下所有生成随机数据的函数由 DeepSeek 所写,变量名经作者简化。
int rand_int(int l, int r)
rand_int(l, r)
将返回一个在闭区间 $[l, r]$ 内的随机整数(int
类型)。代码中有 typedef long long ll
语句,因此此处将 long long
写作 ll
。
ll rand_ll(ll l, ll r)
rand_ll(l, r)
将返回一个在闭区间 $[l, r]$ 内的随机整数(long long
类型)。double rand_double(double l, double r)
rand_double(l, r)
将返回一个在左闭右开区间 $[l, r)$ 内的随机实数(double
类型)。unsigned rand_uint(unsigned l, unsigned r)
rand_uint(l, r)
将返回一个在闭区间 $[l, r]$ 内的随机整数(unsigned
类型)。代码中有 typedef unsigned long long ll
语句,因此此处将 unsigned long long
写作 ull
。
ull rand_ull(ull l, ull r)
rand_ull(l, r)
将返回一个在闭区间 $[l, r]$ 内的随机整数(unsigned long long
类型)。代码中有 template<typename Iter>
。
void rand_shuffle(Iter l, Iter r)
rand_shuffle(l, r)
将对左闭右开区间 $[l, r)$ 内的数据进行随机打乱(参数 $l,r$ 应为指针或迭代器)。代码中的 string
类型常量 LOW
、UPP
、NUM
分别为小写字母集合、大写字母集合、数字集合,可用作此处的 s
。
char rand_char(const string &s)
rand_char(s)
将从 $s$ 中随机选择一个字符返回(若字符串 $s$ 为空则返回 \0
)。代码中的 string
类型常量 LOW
、UPP
、NUM
分别为小写字母集合、大写字母集合、数字集合,可用作此处的 s
。
string rand_string(const string &s, size_t len)
rand_string(s, len)
将从 $s$ 中随机选择 $len$ 个字符组成 string
类型的字符串返回(若字符串 $s$ 为空或 $len = 0$ 则返回 空串)。本代码支持将样例放入测试点。
create_sample
函数(定义形式为 void create_sample()
)。data_start(/*<数据文件名称>*/)
,在 /*<数据文件名称>*/
中填入你认为能表示样例数据文件的字符串(例如 Sample
)。data_end(/*数据文件名称*/)
,在 /*数据文件名称*/
填入与 data_start
中相同的字符串。main
函数。create_sample()
。create
函数(默认定义形式为 void create()
,也可传入关于数据区间的变量)。main
函数。data_start(to_string(/*<循环变量>*/))
。create
函数(默认为 create()
)。data_end(to_string(/*<循环变量>*/))
。若操作无误,执行以上代码将会有以下结果:
请打开文件“生成输出数据程序.cpp”。
由于作者技术限制,生成输出代码中不能使用 cin
,cin
、cout
相关的优化也应避免使用。
将代码中的 string
类型常量 NAME
赋值为题目编号 P1001
。
本代码支持将样例放入测试点。
create_sample
函数(定义形式为 void create_sample()
)。data_start(/*<数据文件名称>*/)
,在 /*<数据文件名称>*/
填入与生成输入数据时 data_start
中相同的字符串。data_end(/*数据文件名称*/)
,在 /*数据文件名称*/
填入与 data_start
中相同的字符串。main
函数。create_sample()
。create
函数(定义形式为 void create()
)。main
函数。data_start(to_string(/*<循环变量>*/))
。create
函数。data_end(to_string(/*<循环变量>*/))
。若操作无误,执行以上代码将会有以下结果: