CYaRon — OI 测试数据生成利器

2022-09-09 12:04:31 浏览数 (1)

CYaRon Yet Another Random Olympic-iNformatics test data generator

By Luogu

出过 OI 题目的都知道,造数据如果没有掌握一些方法,会非常的头疼。

CYaRon 是一个用于生成随机测试数据的 Python 库,内置多种数据结构,例如随机图、树、向量、字符串、数列、多边形等,可以帮助生成有一定强度的测试数据。

CYaRon 基于 Python 语言,所以推荐先学习 Python 后再使用,官方快速入门教程:Github

使用文档

官方文档已经非常完善,请参考官方文档使用 CYaRon:https://github.com/luogu-dev/cyaron/wiki

常用模板

代码语言:javascript复制
#!/usr/bin/env python

from cyaron import * # 引入CYaRon的库

# 这里常用于写数据范围,一般链表长度为测试数据的数量
_n = ati([0, 7, 50, 1E4]) # ati 函数将数组中的每一个元素转换为整形,方便您可以使用 1E4 一类的数来表示数据大小

for i in range(1, 4): # 即在 [1, 4) 范围内循环,也就是从 1 到 3,生成 3 组测试数据。
    test_data = IO(file_prefix = "Example", data_id = i) # 生成 Example[1|2|3].in/out 三组测试数据
    """
    如果不使用参数 file_prefix ,只使用 data_id ,则不会生成文件。
    而使用了 file_prefix 和 data_id 之后,若从 0 开始命名,则 0 不会显示,只是显示 .in 和 .out。
    """
    # file_prefix 是输入/输出文件的前缀名

    n = _n[i] # 获取该组数据的数据范围
    
    # 这里填写输入数据生成程序的主体

    test_data.output_gen("D:\std_binary.exe") # 标程编译后的可执行文件,需要保证正确,不需要 freopen 等,CYaRon 自动给该程序输入并获得输出作为 .out

    # 这里填写输出数据生成程序的主体,若使用 test_data.output_gen,则不需要编写
模板使用示例

以洛谷 P1339 为例生成一组测试数据。这个数据有 3 个测试点,每个测试点包括一个 n 个结点、m 条边的无向图,以及起点 s 和终点 t。各个测试点的数据规模有梯度。

使用 Python 和 CYaRon 完成的数据生成器代码如下:

代码语言:javascript复制
#!/usr/bin/env python

from cyaron import * # 引入CYaRon的库

_n = ati([0, 7, 50, 1E4]) # ati函数将数组中的每一个元素转换为整形,方便您可以使用1E4一类的数来表示数据大小
_m = ati([0, 11, 100, 1E4]) 

# 这是一个图论题的数据生成器,该题目在洛谷的题号为P1339
for i in range(1, 4): # 即在[1, 4)范围内循环,也就是从1到3
    test_data = IO(file_prefix="heat", data_id=i) # 生成 heat[1|2|3].in/out 三组测试数据

    n = _n[i] # 点数
    m = _m[i] # 边数
    s = randint(1, n) # 源点,随机选取一个
    t = randint(1, n) # 汇点,随机选取一个
    test_data.input_writeln(n, m, s, t) # 写入到输入文件里,自动以空格分割并换行

    graph = Graph.graph(n, m, weight_limit=5) # 生成一个n点,m边的随机图,边权限制为5
    test_data.input_writeln(graph) # 自动写入到输入文件里,默认以一行一组u v w的形式输出

    test_data.output_gen("D:\std_binary.exe") # 标程编译后的可执行文件,不需要freopen等,CYaRon自动给该程序输入并获得输出作为.out

0 人点赞