使用CarYon快速制作题目数据

2022-11-24 16:45:29 浏览数 (1)

CarYon简明使用指南

01_下载工具

github

蓝奏云

wiki下载

建议从蓝奏云下载,速度更快。

02_解压缩

将下载后的压缩包解压缩。

解压缩后文件夹分布为:

  • examples
    • A B Problem
    • CF1A Theatre square
    • Luogu P1093
    • Luogu P3366
  • tools
    • Compare
    • Configurstion-File-Analysis
    • Extensions
  • caryon.h
  • myprogram.cpp
  • test.cpp
  • std.cpp

简要说明

  • example 这个文件夹会存放一些使用的例子:
    • A B Problem : 最基础的样例生成
    • CF1A :较为基础的样例生成
    • P1093:多组样例生成
    • P3366 :图论相关的数据生成
  • tools 相关工具。初级使用时不用关注。
    • Compare:对拍器
    • Configurstion-File-Analysis:仅编写配置文件生成数据
    • Extension:插件

03_制作数据

03_1 std文件

将题目的标准代码复制、粘贴到 std.cpp 中。并编译源文件,使其生成 std.exe文件。

注意:每次对std.cpp 的更改,都需要重新编译生成std.exe文件。

03_2 test文件

根据输入格式要求,在test.cpp 中构建相应输入代码。

代码语言:javascript复制
#include "caryon.h"
// including <bits/stdc  .h>
using namespace std;
using namespace ca;  // namespace
int main() {
    dataname = "";  // dataname
    maxtime  = 1000;
    makein(/*start*/, /*end*/) {
        csh();
        // Please finish these rows
    }
    makeout(/*start*/, /*end*/);
    //debug(/*start*/, /*end*/); 程序对拍
    return 0;
}
  1. datename 中存放题目名称。之后会生成 name1.inname1.out 这样对应的数据。建议留空,使其生成1.in1.out 这样的数据。
  2. maxtime:程序实现。不用改动。
  3. makeinmakeout 中的startend参数。对应你需要生成的数据点开始、结束编号。如你想生成start.in,start.out ~ end.in,end.out 的数据,填上相应的参数即可。
  4. makein 内部,csh 的下方,根据输入要求书写对应的代码。

03_3 随机数据

cyrand(a,b) 可返回一个在 ab之间的随机数。

如果要产生一个long long 范围内的随机数,用cyrand_ll()

03_4 写入in文件

将生成的随机值写入到文件中。

  • inint(int) :将一个整型的变量或常量写入每一个输入文件。
  • instring(std::string) :将一个 C 字符串写入每一个输入文件。
  • 任意类型格式:in<元素类型>(对应类型数据) : 例:long long a;in<long long>(a)
  • inendl():在输入文件中打印一个换行符。
  • inspace():在输入文件中打印一个空格。

03_5 制作out文件

根据输入要求写好test.cpp 文件后,编译运行即可。

此时,在test.cpp所在的目录里面必须有std.exe文件,也就是俗称的标准程序。注意一定是标准程序经过编译后的 std.exe文件,才能制造出对应的out文件。std.cpp 中不需要包含任何文件操作。

例子说明

输入格式

代码语言:javascript复制
#include "caryon.h"
// including <bits/stdc  .h>
using namespace std;
using namespace ca;  // namespace
int main() {
    dataname = "";  // dataname留空
    maxtime  = 1000;
    makein(/*start*/8, /*end*/10) {//针对100%的数据,生成测试点8.in ~ 测试点10.in
        csh();
        // Please finish these rows
		int n=cyrand(1e5,1e6);// n的范围 1e5 ~ 1e6 ,与前面的70%的数据作区分。
		inint(n);//写入n
		instring("n");//写入换行 也可用inendl()
		for(int i=1;i<=n;i  ){//循环n次
			inint(cyrand(1,2e9));//写入随机出的Hi, 范围 1 ~ 1e9
			instring(" ");//写入空格
			inint(cyrand(1,1e3));//写入随机出的Vi, 范围 1 ~ 1e3
			instring("n");//写入换行
		}
    }
    makeout(/*start*/8, /*end*/10);//针对100%的数据,生成测试点8.out ~ 测试点10.out
    //debug(/*start*/, /*end*/);
    return 0;
}

注意

当前爱思创题库的题目数据需注意行末的空格。行末不要有多余的空格。

Q.E.D.

0 人点赞