如何使用 luogu 的 CYaRON 生成数据

· · 个人记录

luoguCYaRON已经贴主页很久了。其实他是一个很方便的自动数据生成器,只不过官方的用法有些 (潦草) 专业,大部分人都看不懂。

所以今天就 (水) 一片博客给大家讲一讲如何使用

1.安装CYaRON

[top]

1.安装CYaRON

(一)先下载一个python,必须的 CYaRON依赖python

python下载链接:python

(二)安装CYaRON

等待进度条安装完

如果已经安装完了,那么恭喜你,你成功安装了CYaRON

[top]

2.使用CYaRON

(一)打开python

(二)


from cyaron import * # 引入CYaRon的库

for i in range(1, 51): # 51这里填写你想要生成的数据的个数+1
    test_data = IO(file_prefix="heat", data_id=i) # 生成 heat[1-50].in/out 五十组测试数据 heat这里可以更改 这里是前缀
     test_data.output_gen("C:\\Users\\Administrator\\Documents\\未命名1.exe") #这里写源代码编译出来的exe文件!!注意不能写freopen

(三) 一些基础的语法

1.如果你想生成一个随机数字n的话,你可以输入

n=randint(1,1000)#int只生成的数据的类型,括号里的是数据范围

同理,生成多个数据

x=randint(1,1000)
y=randint(1,1000)
z=randint(1,1000)

同理,生成一个1到10000的数据

x=randint(1,10000)

2.光是生成一个变量没有用,需要把他输出(关于换行和空格,CYaRON可以自动处理)

test_data.input_writeln(n)

这样就可以把变量输出到了输入中

如果你想把多个数据放在一行,就可以这样

test_data.input_writeln(n,m,s,t)

3.循环数据

很多题都有多行数据,那该怎么办呢譬如有n行数据,那该怎么生成

for i in range(1,n):
    a=randint(1,1000);
    test_data.input_writeln(a)

一行多个数据?照样行!


for i in range(1,n):
    a=randint(1,1000);
    b=randint(1,1000);
    test_data.input_writeln(a,b)

4.其他数据

有些特殊的数据都有模版,譬如图

这个的话,举例就算了,可以去github上去看

graph = Graph.graph(n,m,weight_limit=5)

5.输出 首先需要些一个源代码,然后,再编译成exe 再在输出里写路径 譬如

 test_data.output_gen("D:\\std_binary.exe")

总结

CYaRON是个非常好用的数据生成器

只不过大家(只我们这种看不懂的人)看不懂github

希望这片文章能帮到你

附录 T154214数据

#!/usr/bin/env python

from cyaron import * # 引入CYaRon的库

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

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