如何使用 luogu 的 CYaRON 生成数据

TNTEnter

2020-10-31 17:40:46

Personal

### **luogu** 的 **CYaRON**已经贴主页很久了。其实他是一个很方便的自动数据生成器,只不过官方的用法有些 _~~(潦草)~~_ 专业,大部分人都看不懂。 所以今天就 _~~(水)~~_ 一片博客给大家讲一讲如何使用 [1.安装CYaRON](#1) [top] ## 1.安装CYaRON (一)先下载一个python,必须的 CYaRON依赖python python下载链接:[python](https://www.python.org/getit/) (二)安装CYaRON - WIN+R打开cmd(windows) - command+空格打开搜索terminal(macos) - 输入 pip install cyaron - 安装 CYaRON 等待进度条安装完 如果已经安装完了,那么恭喜你,你成功安装了CYaRON [top] ## 2.使用CYaRON (一)打开python - 打开python - 点击file - 点击newfile (二) - 新手建议先复制模版 高手的话 。。。直接看GITHUB(话说看得懂GITHUB的人会来我这里看吗) ```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的话,你可以输入 ```python n=randint(1,1000)#int只生成的数据的类型,括号里的是数据范围 ``` 同理,生成多个数据 ```python x=randint(1,1000) y=randint(1,1000) z=randint(1,1000) ``` 同理,生成一个1到10000的数据 ```python x=randint(1,10000) ``` 2.光是生成一个变量没有用,需要把他输出(关于换行和空格,CYaRON可以自动处理) ```python test_data.input_writeln(n) ``` 这样就可以把变量输出到了输入中 如果你想把多个数据放在一行,就可以这样 ```python test_data.input_writeln(n,m,s,t) ``` 3.循环数据 很多题都有多行数据,那该怎么办呢譬如有n行数据,那该怎么生成 ```python for i in range(1,n): a=randint(1,1000); test_data.input_writeln(a) ``` 一行多个数据?照样行! ```python for i in range(1,n): a=randint(1,1000); b=randint(1,1000); test_data.input_writeln(a,b) ``` 4.其他数据 有些特殊的数据都有模版,譬如图 这个的话,举例就算了,可以去github上去看 ```python graph = Graph.graph(n,m,weight_limit=5) ``` 5.输出 首先需要些一个源代码,然后,再编译成exe 再在输出里写路径 譬如 ```python test_data.output_gen("D:\\std_binary.exe") ``` 总结 CYaRON是个非常好用的数据生成器 只不过大家(只我们这种看不懂的人)看不懂github 希望这片文章能帮到你 附录 T154214数据 ```python #!/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 ```