testlib.h从入门到入坟
学了这么久OI连个spj都不会写真是惭愧啊。。。
趁着没退役赶紧学一波吧
配置
我是直接暴力复制粘贴的。。
然后扔到MingW的目录里

直接引用就好啦

基本语法
引用testlib.h后,我们可以从三个地方读入数据
inf:输入文件
ouf:选手输出
ans:标准输出
当然,肯定不能直接用scanf读入,testlib里内置了很多读入函数
基本上就够用了。。。

一个简单的例子
#include "testlib.h" // main 需要接收命令行参数
int main(int argc, char *argv[])
{
// 初始化 checker 环境 —— 解析命令行参数、打开文件……
registerTestlibCmd(argc, argv); // 三个全局变量 inf, ouf, ans 依次为输入、选手输出和参考输出
int pans = ouf.readInt(-, );
int jans = ans.readInt(); if (pans == jans)
quitf(_ok, "The sum is correct.");
else
quitf(_wa, "The sum is wrong: expected = %d, found = %d", jans, pans); return ;
}
运行
运行的时候需要切换到checker所在的目录,输入以下命令
windows
checker <input-file> <output-file> <answer-file>
Linux
./checker <input-file> <output-file> <answer-file>
根据输出结果可以判断程序的对错
注意事项
写这篇文章主要是为了记一下容易翻车的地方。。
- 读入的时候必须把三个文件里的内容都读完,不然会出现

如果全都读完后仍然显示这个。。。。
zzq给了个解决方案Orz

- checker内尽量不要出现中文字符,不然上传到某些OJ的时候可能会出BUG

自己写了个模板
#include "testlib.h"
#include<bits/stdc++.h>
using namespace std;
const int MAXN = + ;
void YES() {
quitf(_ok, "The ans is correct.");
}
void NO() {
quitf(_wa, "The ans is not correct.");
exit();
}
void readInf() { }
void readOuf() { }
void readAns() { }
int main(int argc, char *argv[]) {
registerTestlibCmd(argc, argv); readInf();
readOuf();
readAns(); return ;
}
板子
testlib.h从入门到入坟的更多相关文章
- 深度分析ReentrantLock源码及AQS源码,从入门到入坟,建议先收藏!
一.ReentrantLock与AQS简介 在Java5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile.Java5.0增加了一种新的机制:Reentra ...
- SpringBoot整合SpringData JPA入门到入坟
首先创建一个SpringBoot项目,目录结构如下: 在pom.xml中添加jpa依赖,其它所需依赖自行添加 <dependency> <groupId>org.springf ...
- SrpingBoot入门到入坟04-配置文件
SpringBoot使用一个全局的配置文件,名称是固定,作用就是修改SpringBoot自动配置的默认值. *application.properties *application.yml 先看看两者 ...
- SrpingBoot入门到入坟03-基于idea快速创建SpringBoot应用
先前先创建Maven项目然后依照官方文档再然后编写主程序写业务逻辑代码才建立好SpringBoot项目,这样太过麻烦,IDE都支持快速创建,下面基于idea: 使用Spring Initializer ...
- SrpingBoot入门到入坟02-HelloWorld的细节和初始自动配置
关于SpringBoot的第一个HelloWorld的一些细节: 1.父项目 首先查看项目中的pom.xml文件 文件中有个父项目,点进去则: 它里面也有一个父项目,再点进去: 可以发现有很多的依赖版 ...
- SrpingBoot入门到入坟01-HelloWorld和SpringBoot打Jar包
第一个SpringBoot: 建立一个maven项目: 再pom.xml里面增加依赖: <?xml version="1.0" encoding="UTF-8&qu ...
- nginx从入门到入坟
目录 1.nginx下载安装 2.启动命令 3.服务脚本 4.nginx目录说明 5.nginx配置文件 6.虚拟主机与域名配置和站点配置 6.1server_name配置规则 7.反向代理负载均衡配 ...
- Python Web自动化测试入门与实战,从入门到入行
Python Web自动化测试入门与实战 购买地址 · 京东:https://item.jd.com/69239480564.html 天猫:https://detail.tmall.com/it ...
- 音视频开发之H.264 入门知识
大家如果有做过音视频相关的项目,那么肯定对 H.264 相关的概念了解的比较通透,这里我为什么还要写这样一篇文章呢?一来是为了对知识的总结,二来是为了给刚入门音视频的同学一个参考. 基础概念 H.26 ...
随机推荐
- [Swift]LeetCode933. 最近的请求次数 | Number of Recent Calls
Write a class RecentCounter to count recent requests. It has only one method: ping(int t), where t r ...
- [Swift]LeetCode935. 骑士拨号器 | Knight Dialer
A chess knight can move as indicated in the chess diagram below: . This time, we place o ...
- 微信小程序请求API接口PHPSESSID变化的解决方式
微信小程序开发,请求服务器API的方法使用的是微信官方提供的wx.request()方法.在开发中发现,每一个请求都会生成一个独立的PHPSESSID,如下图示: 搜索后得知,这是由于wx.reque ...
- server.properties 文件详解
[转载]:server.properties 文件详解 # 每一个Broker在集群中的唯标识.即使Broker的IP地址发生了变化,broker.id只要没变,则不会影响consumers的消息情况 ...
- 【java提高】---java反射机制
java反射机制 一.概述 1.什么是反射机制 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态 ...
- A10映射方法
#创建服务 slb server rs_10.90.6.95 10.90.6.95 port 5001 tcp slb server rs_10.90.6.96 10.90.6.96 port 500 ...
- 使用ML.NET实现情感分析[新手篇]后补
在<使用ML.NET实现情感分析[新手篇]>完成后,有热心的朋友建议说,为何例子不用中文的呢,其实大家是需要知道怎么预处理中文的数据集的.想想确实有道理,于是略微调整一些代码,权作示范. ...
- Error: Cannot fit requested classes in a single dex file (# methods: 149346 > 65536)
引用第三方库的jar文件,都有可能会触发这个错误.解决方案如下: 参考<[Android]Cannot fit requested classes in a single dex file. T ...
- 从零打卡leetcode之day 4--无重复最长字符串
题目描述: 给定一个字符串,找出不含有重复字符的最长子串的长度. 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3. ...
- AR增强现实开发介绍
AR增强现实开发介绍 ---理论篇 AR增强现实开发最近做一些AR增强现实的内容,一些普及性的内容,与大家分享. 一: 什么是AR增强现实技术: 是一种将真实世界信息和虚拟世界信息“无缝”集成的新 ...