首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

ACM/ICPC/CCPC等算法竞赛规范题面撰写详细教程(全网最详细,看完包懂)

  • 25-02-15 07:20
  • 4439
  • 13672
blog.csdn.net

文章目录

  • 前言
  • 1.题面撰写注意事项
    • 1.1 题目背景
    • 1.2 题目描述
    • 1.3 输入输出格式
    • 1.4 数据范围
    • 1.5 样例
  • 2.题面撰写方法(基于olymp.sty的LaTeX方法)
    • 2.0 模板及测试用例
    • 2.1 配置LaTeX环境
    • 2.2 下载olymp.sty
    • 2.3 `main.tex`模板用法
    • 2.4 `A.tex`模板用法
    • 2.5 编译
  • 常见问题及对应解决方案

前言


✨✨✨ 如果您对这篇文章感兴趣,可以点击【导航页 - 访客必读】一文囊括主页所有优质博客 查看更多优质内容,希望可以帮您解决更多问题~。 ✨✨✨


ACM/ICPC/CCPC等各类算法竞赛对于题面都有比较严格的要求,一份不合格的题面会给选手带来非常差的阅读体验,甚至可能会使得题意出现歧义等。

因此,对于算法竞赛而言,一份规范的题面非常重要,本篇文章将给出一份详细的规范题面撰写指南。

本文将分为题面撰写注意事项、题面撰写方法两大部分,其中目前主流的题面撰写方法有基于olymp.sty的LaTeX方法和基于polygon平台的一键导出两种方式,但由于polygon平台对于新手而言有一定的学习成本、平台访问速度不稳定等因素,因此本教程将详细介绍基于olymp.sty的LaTeX方法。


博客有任何错误或者大家有任何问题,都可以直接在评论区留言~

如果我的博客成功解决了您的问题,烦请一件三连 (▽),不胜感激!

1.题面撰写注意事项

本部分主要参考 OI-Wiki

1.1 题目背景

  1. 尽量简短,题目背景非题面必需,可以省略
  2. 题目背景不可以影响选手对题意的理解

1.2 题目描述

  1. 每个可能不被理解的定义都应该得到解释

例如,题目涉及到了下取整的符号, ⌊ x y ⌋ \lfloor \frac{x}{y}\rfloor ⌊yx​⌋,那么你就需要额外添加对下取整的解释,

向下取整是指将一个实数向下舍入到最接近的、不超过它的整数。用数学符号表示为 ⌊x⌋,其中 x 是实数。例如,⌊3.8⌋=3,
⌊3.8⌋=3,⌊−2.4⌋=−3, ⌊−2.4⌋=−3。

  1. 对可能被误解的多义词,给出详细说明

例如不能不加说明地用“路径”代指“一条边”

  1. 相同概念要用同一词汇来描述

例如,不应该一会说“费用”,一会说“代价”

  1. 题目不能有歧义,且错误的理解可以被说通

  2. 题面不可自相矛盾

1.3 输入输出格式

  1. 尽量在输入输出格式中说明每个变量的具体含义

除非变量的意义非常长,没法一句话说清楚(这时可以说「意义见题目描述」)

  1. 如果输出含有小数,尽量用SPJ来限制误差,而不是“要求保留x位小数”

例如,若保留3位小数,期望答案为0.0015,那么只要有任何答案小于0.0015,即使0.00149999…都会被判WA,显然不合理。

若无法使用SPJ,请保证对精度的要求是有限的,例如:请输出答案四舍五入后保留小数点后三位的结果。令标准答案为 ans,数据保证对于任意满足 ∣ x − a n s ∣ max ⁡ ( 1 , a n s ) < 1 0 − 9 \frac{|x-ans|}{\max(1,ans)}<10^{-9} max(1,ans)∣x−ans∣​<10−9的 x,四舍五入后结果与 ans 四舍五入后相同。

  1. 表述可以参考下列句子
输入的第一行包含三个正整数 $n$, $m$, $k$ ($1\le n,m\le 2\cdot 10^5$, $1\le k\le 100$) — $n$ 表示数列的长度,$m$ 表示操作个数,$k$ 的意义见题目描述。
  • 1
输入的第二行包含 $n$ 个非负整数 $a_1,a_2,\ldots,a_n$ ($1\le a_i\le 10^9$) — 题目给出的数列。
  • 1
接下来的 $m$ 行中的第 $i$ 行包含两个正整数 $l_i$ 和 $r_i$ ($1\le l_i\le r_i\le n$),表示第 $i$ 次操作在区间 $[l_i,r_i]$ 上进行。
  • 1
接下来的 $n-1$ 行,每行包含两个正整数 $u$ 和 $v$ ($1\le u,v\le n$),表示 $u$ 和 $v$ 之间由一条边相连。

数据保证给出的边能构成一棵树。
  • 1
  • 2
  • 3
输入的唯一一行包含一个由小写英文字母构成的非空字符串,其长度不超过 $10^6$。
  • 1
输入的第二行包含一个小数点后不超过三位的实数 $x$ ($-10^6\le x\le 10^6$),意义见题目描述。
  • 1
输出包含一个实数,当你的输出与标准答案之间的绝对误差或相对误差小于 $10^{-6}$ 时视作正确。
  • 1
输出的第二行包含 $n$ 个正整数,表示你构造的一组方案 — 其中第 $i$ 个数表示你打出的第 $i$ 张牌的编号。

如果有多组合法的答案,可以任意输出其中一组。
  • 1
  • 2
  • 3

1.4 数据范围

一般来说,数据范围写在输入格式里或者题目最后都可以,XCPC竞赛往往采用前者。

  • 数据范围的描述一定要完整

下面是常见错误:

  1. 「整数」中的「整」。
  2. 题面中只说了是「整数」没说是「正整数」,并且数据范围中只有上限没有下限。
  3. 字符串没说字符集。
  4. 实数没说小数点后位数。
  5. 某些变量没有给范围。

1.5 样例

  1. 样例应当有一定的强度

能够查出一些简单的错误。读错题意的人应当能够通过样例发现自己读错了题意。

  1. 有多种操作的题,每种操作都应在样例中出现

  2. 有多种输出的题,每种输出都应在样例中出现

例外:实际上不可能无解但还要判断是否有解的题目。

2.题面撰写方法(基于olymp.sty的LaTeX方法)

2.0 模板及测试用例

我在此给出模板及测试用例的百度网盘链接。

2.1 配置LaTeX环境

推荐采用WSL2+VsCode+LaTeX的配置方法,详见此教程。

2.2 下载olymp.sty

可以在github下载官方原版文件或者针对中文修改后的文件(前者不支持中文),下载完成后命名为olymp.sty,保存在LaTeX工作目录下(与main.tex同一目录),如下图:

在这里插入图片描述

如果访问github有困难,也可以直接用我在2.0节给出的链接中的olymp.sty。(给出的是针对中文修改后的文件)

2.3 main.tex模板用法

具体main.tex文件内容如下:(详细注释版)

\documentclass[11pt,a4paper,chinese]{ctexart} % 文档类型为ctexart,基础字号 11 磅,纸张尺寸 A4,支持中文

% 加载各种宏包
\usepackage{ctex}
\usepackage{array,lastpage,amsmath,amssymb,mathtools,enumitem,graphicx,multirow,tocbibind,longtable,makecell,varwidth,titlesec,bm,booktabs,comment,qtree,listings,tikz,flowchart,algorithm,algorithmic}
\usepackage{olymp}
\usepackage{fancyhdr}
 
% \setCJKmainfont[BoldFont=Heiti SC Medium]{Songti SC Light}
\setCJKmainfont[BoldFont=SimHei]{SimSun}

% 页眉页脚设置
\pagestyle{fancy}
\fancyhf{}
\rhead{\sffamily\normalsize 年/月/日} % 右页眉:日期
\lhead{\sffamily \normalsize 比赛标题} % 左页眉:比赛名称
\renewcommand{\headrulewidth}{.7pt} % 页眉线宽
\renewcommand{\footrulewidth}{.7pt} % 页脚线宽
\setlength{\headsep}{15pt} % 页眉与正文间距
\cfoot{\sffamily \normalsize Page \thepage \ of \pageref{LastPage}} % 页脚居中显示页码

% 居中显示 verbatim 内容(如输入输出样例)
\usepackage{varwidth}
\newenvironment{centerverbatim}{\par\centering\varwidth{\linewidth}\verbatim}{\endverbatim\endvarwidth\par}

\usepackage[thinlines]{easytable}
% 代码高亮配置:代码自动换行、禁用边框、使用等宽字体
\lstset{escapeinside=``, breaklines=true, frame=none, extendedchars=false, basicstyle=\ttfamily, showstringspaces=false}
% 优化中文排版
\setlength{\parindent}{2em} % 首行缩进 2 字符
\setlength{\parskip}{2.0ex} % 段间距 2 倍行高
\linespread{1.15} % 行距 1.15 倍

% 数学符号简写
\newcommand*{\mat}[1]{\boldsymbol{\mathrm{#1}}} % 粗体矩阵
\renewcommand*{\vec}[1]{\boldsymbol{\mathrm{#1}}} % 粗体向量

% 绘图工具配置
\usepackage{tikz,flowchart}
\usetikzlibrary{shapes,shapes.geometric,arrows,automata,positioning}
\usepackage{pgfplots}

% 正文
\begin{document}

\input A.tex
\input B.tex


\end{document}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 第1行\documentclass[11pt,a4paper,chinese]{ctexart}中的chinese

表示子项目名称以中文显示,例如:
在这里插入图片描述
如果想要设置为英文,将chinese改成english即可。

  • 第10行\setCJKmainfont[BoldFont=SimHei]{SimSun}

根据自己电脑上已安装的字体进行设置即可。

可以通过此教程的“补充”部分,在WSL中使用Windows字体。

如果不确定自己系统上已安装的字体是什么,linux系统可以通过fc-list :lang=zh查看

  • 第15行\rhead{\sffamily\normalsize 年/月/日}和第16行\lhead{\sffamily \normalsize 比赛标题}

用于设置比赛日期和比赛名称

  • 第46和第47行为正文的核心部分(即\begin{document}和\end{document}中间)

正文核心部分通过\input tex文件名来加载同目录下的其他tex文件,这样做可以使得main文件更加简化,便于修改和管理。

最终题面PDF的题目顺序,将按照此处文件的顺序按ABCDE...进行编号。

2.4 A.tex模板用法

其中,A.tex可以替换为任意的tex文件。

具体模板为:

\begin{problem}{标题}{standard input}{standard output}{1 s}{256 MB}


这里写题目描述。

\begin{figure}[H]
    \centering
    \includegraphics[width=0.5\textwidth]{蛋仔.png} 
\end{figure}


\InputFile 

第一行:三个整数$n,m,k$,其中$n$和$m$表示地图尺寸,$k$表示蛋仔数

接下来$k$行:每行两个整数$x,y$,表示相应蛋仔的坐标

$1 \leq n, m \leq 100,0 \leq k \leq 100,1 \leq x \leq n,1 \leq y \leq m$

一个单元格中可能有多个蛋仔


\OutputFile

共一行:如果小H获胜,输出"YES",否则,输出"NO"(不包含引号)。


\Examples

\begin{example}
\exmp{%
3 2 1 
2 1
}{%
YES
}%
\exmp{%
9 9 0
}{%
NO
}%
\exmp{%
20 20 4
10 10 
10 10
10 10
10 10
}{%
NO
}%
\end{example}


\Note

这里是提示信息


\end{problem}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 第1行\begin{problem}{标题}{standard input}{standard output}{1 s}{256 MB}

标题自定义即可,不需要添加题号;
后四项分别为输入文件、输出文件、时间限制、空间限制

  • 第4行这里写题目描述

在此处写题面正文,各种LaTex格式大家自行搜索即可。

  • 子项目解释

以第12行\InputFile 为例,\InputFile后接输入格式,例如:

在这里插入图片描述

注意各个子项目如Input、Output、Explanations等均非必须,根据自己需求添加即可。

各个子项目的详细解释见olymp.sty的\if@chinese部分,大家根据自己需求来进行设置即可。

\if@chinese
\def\kw@ProblemTutorial{题目解答}
\def\kw@Problem{Problem}
\def\kw@ProblemAuthor{题目作者:}
\def\kw@ProblemDeveloper{题目开发者:}
\def\kw@ProblemOrigin{题目来源:}
\def\kw@InputFileName{输入文件:}
\def\kw@OutputFileName{输出文件:}
\def\kw@TimeLimit{时间限制:}
\def\kw@MemoryLimit{内存限制:}
\def\kw@Feedback{反馈方式:}
\def\kw@stdin{标准输入流}
\def\kw@stdout{标准输出流}
\def\kw@Background{背景知识}
\def\kw@Specification{题目要求}
\def\kw@Interaction{交互}
\def\kw@Input{输入格式}
\def\kw@Output{输出格式}
\def\kw@Example{样例}
\def\kw@Examples{样例}
\def\kwExampleNotes{样例说明}
\def\kw@Explanation{样例解释}
\def\kw@Explanations{样例解释}
\def\kw@Illustration{图表说明}
\def\kw@Scoring{评分}
\def\kw@Note{提示}
\def\kw@Notes{提示}
\def\kw@Constraints{约束}
\def\kw@version{版本}
\def\kw@revision{版本}
\def\kw@SubtaskOne{子任务 1}
\def\kw@SubtaskTwo{子任务 2}
\def\kw@SubtaskThree{子任务 3}
\def\kw@SubtaskFour{子任务 4}
\def\kw@SubtaskFive{子任务 5}
\def\kw@SubtaskSix{子任务 6}
\def\kw@Subtask{子任务}
\def\kw@points{分}
\def\kw@Page{Page}
\def\kw@of{of}
\def\kw@notstated{未说明}
\def\kw@IntentionallyBlankPage{此页故意留白}
\def\kw@defaultinputname{test}
\def\kw@defaultoutputname{answer}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 特别注意:样例部分

请务必按照下列格式编写样例:

\Examples

\begin{example}
\exmp{%
3 2 1 
2 1
}{%
YES
}%
\exmp{%
9 9 0
}{%
NO
}%
\exmp{%
20 20 4
10 10 
10 10
10 10
10 10
}{%
NO
}%
\end{example}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

每个样例用\exmp表示,务必在每个大括号后边都加上百分号%,如下图:
在这里插入图片描述
至于不加%会发生什么,大家自己尝试一下就知道了~

2.5 编译

编译后会生成相应的PDF文件,如下图:在这里插入图片描述

常见问题及对应解决方案

目前按照本教程进行操作,还未遇到任何问题。

欢迎大家将自己遇到的问题回复在评论区中,我会积极解答并将其补充到博客中,大家共同进步!

注:本文转载自blog.csdn.net的hansel_sky的文章"https://blog.csdn.net/qq_73162098/article/details/145379101"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top