如何使用 luogu 的 CYaRON 生成数据
TNTEnter
2020-10-31 17:40:46
### **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
```