生成数据代码 & 使用教程

最后更新于 2025-08-11 12:25:22
作者
分类 个人记录

前言

现在已经是 $2025$ 年了,居然还有人不会造数据?!
本文将详细介绍我在 C++ 中常用的数据生成方法,并提供完整教程和示例代码。

代码(是 Zip 压缩包)

以下内容以生成 P1001 A+B Problem 的数据为例。

注释

生成输入数据

请打开文件“生成输入数据程序.cpp”。

预处理

将代码中的 string 类型常量 NAME 赋值为题目编号 P1001

生成随机数据的函数的用法

注释

以下所有生成随机数据的函数由 DeepSeek 所写,变量名经作者简化。

rand_int

  • 定义形式int rand_int(int l, int r)
  • 用法:调用 rand_int(l, r) 将返回一个在闭区间 $[l, r]$ 内的随机整数(int 类型)。

rand_ll

注释

代码中有 typedef long long ll 语句,因此此处将 long long 写作 ll

  • 定义形式ll rand_ll(ll l, ll r)
  • 用法:调用 rand_ll(l, r) 将返回一个在闭区间 $[l, r]$ 内的随机整数(long long 类型)。

rand_double

  • 定义形式double rand_double(double l, double r)
  • 用法:调用 rand_double(l, r) 将返回一个在左闭右开区间 $[l, r)$ 内的随机实数(double 类型)。

rand_uint

  • 定义形式unsigned rand_uint(unsigned l, unsigned r)
  • 用法:调用 rand_uint(l, r) 将返回一个在闭区间 $[l, r]$ 内的随机整数(unsigned 类型)。

rand_ull

注释

代码中有 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 类型)。

rand_shuffle

注释

代码中有 template<typename Iter>

  • 定义形式void rand_shuffle(Iter l, Iter r)
  • 用法:调用 rand_shuffle(l, r) 将对左闭右开区间 $[l, r)$ 内的数据进行随机打乱(参数 $l,r$ 应为指针或迭代器)。

rand_char

注释

代码中的 string 类型常量 LOWUPPNUM 分别为小写字母集合、大写字母集合、数字集合,可用作此处的 s

  • 定义形式char rand_char(const string &s)
  • 用法:调用 rand_char(s) 将从 $s$ 中随机选择一个字符返回(若字符串 $s$ 为空则返回 \0)。

rand_string

注释

代码中的 string 类型常量 LOWUPPNUM 分别为小写字母集合、大写字母集合、数字集合,可用作此处的 s

  • 定义形式string rand_string(const string &s, size_t len)
  • 用法:调用 rand_string(s, len) 将从 $s$ 中随机选择 $len$ 个字符组成 string 类型的字符串返回(若字符串 $s$ 为空或 $len = 0$ 则返回 空串)。

生成样例数据

本代码支持将样例放入测试点。

  1. 找到代码中的 create_sample 函数(定义形式为 void create_sample())。
  2. 写一个语句 data_start(/*<数据文件名称>*/),在 /*<数据文件名称>*/ 中填入你认为能表示样例数据文件的字符串(例如 Sample)。
  3. 输出样例数据。
  4. 写一个语句 data_end(/*数据文件名称*/),在 /*数据文件名称*/ 填入与 data_start 中相同的字符串。
  5. 找到 main 函数。
  6. 调用 create_sample()
代码片段

生成其他随机数据

  1. 找到代码中的 create 函数(默认定义形式为 void create(),也可传入关于数据区间的变量)。
  2. 使用随机函数输出数据。
  3. 找到 main 函数。
  4. 写一个循环,循环次数为数据组数。
  5. 写一个语句 data_start(to_string(/*<循环变量>*/))
  6. 调用 create 函数(默认create())。
  7. 写一个语句 data_end(to_string(/*<循环变量>*/))
注释
代码片段
完整代码

结果展示

若操作无误,执行以上代码将会有以下结果:

控制台输出
文件夹 `data` 内部文件如下(请保证文件夹 `data` 存在)
作者电脑中文件 `P1001_1.in` 中的数据(由于随机性,每个人的输出结果可能不同):

生成输出数据

请打开文件“生成输出数据程序.cpp”。

WARNING

由于作者技术限制,生成输出代码中不能使用 cincincout 相关的优化也应避免使用。

预处理

将代码中的 string 类型常量 NAME 赋值为题目编号 P1001

生成样例数据

本代码支持将样例放入测试点。

  1. 找到代码中的 create_sample 函数(定义形式为 void create_sample())。
  2. 写一个语句 data_start(/*<数据文件名称>*/),在 /*<数据文件名称>*/ 填入与生成输入数据时 data_start 中相同的字符串。
  3. 输出样例数据。
  4. 写一个语句 data_end(/*数据文件名称*/),在 /*数据文件名称*/ 填入与 data_start 中相同的字符串。
  5. 找到 main 函数。
  6. 调用 create_sample()
代码片段

生成其他随机数据

  1. 找到代码中的 create 函数(定义形式为 void create())。
  2. 放入题目标程,无需更改任何内容(若标程有全局函数或全局变量,按照正常情况写在全局即可)。
  3. 找到 main 函数。
  4. 写一个循环,循环次数为数据组数。
  5. 写一个语句 data_start(to_string(/*<循环变量>*/))
  6. 调用 create 函数。
  7. 写一个语句 data_end(to_string(/*<循环变量>*/))
代码片段
完整代码

结果展示

若操作无误,执行以上代码将会有以下结果:

控制台输出
文件夹 `data` 内部文件如下
作者电脑中文件 `P1001_1.out` 中的数据(由于随机性,每个人的输出结果可能不同)