```
\documentclass[UTF8]{ctexart}
\usepackage{geometry}
\usepackage{fancyhdr}
\usepackage{graphicx}
\usepackage{array}
\newcommand{\PreserveBackslash}[1]{\let\temp=\#1\let\=\temp}
\newcolumntype{C}[1]{>{\PreserveBackslash\centering}p{#1}}
\newcolumntype{R}[1]{>{\PreserveBackslash\raggedleft}p{#1}}
\newcolumntype{L}[1]{>{\PreserveBackslash\raggedright}p{#1}}
% \author{ARZhu}
\author{\zihao{-3}第X试}
\title{\zihao{2}XXX信息竞赛(XXOI201X)}
\date{}
\geometry{left=3.18cm,right=3.18cm,top=2.54cm,bottom=2.54cm}
\begin{document}
\maketitle
\thispagestyle{empty}
\begin{center}
\zihao{-3}\textbf{(请选手务必仔细阅读本页内容)}
\end{center}
\textbf{一、题目概况}
\begin{center}
\begin{tabular}{*{5}{|C{7em}}|}
\hline
中文题目名称 & & & & \ \hline
英文题目与子目录名 & & & & \ \hline
可执行文件名 & & & & \ \hline
输入文件名 & .in & .in & .in & .in \ \hline
输出文件名 & .out & .out & .out & .out \ \hline
每个测试点时限 & 1秒 & 1秒 & 1秒 & 1秒 \ \hline
内存上限 & 128M & 128M & 128M & 128M \ \hline
测试点数目 & 10 & 10 & 10 & 10 \ \hline
每个测试点分值 & 10 & 10 & 10 & 10 \ \hline
附加样例文件 & 有 & 有 & 有 & 有 \ \hline
结果比较方式 & \multicolumn{4}{|c|}{全文比较(过滤行末空格及文末回车)} \ \hline
题目类型 & 传统 & 传统 & 传统 & 传统 \ \hline
\end{tabular}
\end{center}
%\textbf{三、优化开关}
%\begin{center}
%\begin{tabular}{*{4}{|C{9em}}|}
%\hline
% 对于C++语言 & -O2\ -lm & -O2\ -lm & -O2\ -lm \ \hline
% 对于C语言 & -O2\ -lm & -O2\ -lm & -O2\ -lm \ \hline
% 对于pascal语言 & -O2 & -O2 & -O2 \ \hline
%\end{tabular}
%\end{center}
\textbf{注意事项:}
\begin{enumerate}
\item{文件名(程序名和输入输出文件名)必须使用英文小写。}
\item{C/C++中函数main()的返回类型必须是int,程序正常结束时的返回值必须是0。}
\item{评测时采用的机器配置为:CPU P4.30GHz,内存1G,上述时限以此配置为准。}
\item{特别提醒:评测在NOI Linux下进行。}
\end{enumerate}
\newpage
\setcounter{page}{1}
\pagestyle{plain}
\pagenumbering{arabic}
% T1
\newpage
\section{}
\begin{center}
\tt\large{(.cpp/c/pas)}
\end{center}
\subsection{问题描述}
\subsection{输入}
\subsection{输出}
\subsection{输入输出样例1}
\subsubsection{输入样例}
\subsubsection{输出样例}
\subsection{输入输出样例2}
\subsubsection{输入样例}
\subsubsection{输出样例}
\subsection{约定和数据范围}
% T2
\newpage
\section{}
\begin{center}
\tt\large{(.cpp/c/pas)}
\end{center}
\subsection{问题描述}
\subsection{输入}
\subsection{输出}
\subsection{输入输出样例1}
\subsubsection{输入样例}
\subsubsection{输出样例}
\subsection{输入输出样例2}
\subsubsection{输入样例}
\subsubsection{输出样例}
\subsection{约定和数据范围}
% T3
\newpage
\section{}
\begin{center}
\tt\large{(.cpp/c/pas)}
\end{center}
\subsection{问题描述}
\subsection{输入}
\subsection{输出}
\subsection{输入输出样例1}
\subsubsection{输入样例}
\subsubsection{输出样例}
\subsection{输入输出样例2}
\subsubsection{输入样例}
\subsubsection{输出样例}
\subsection{约定和数据范围}
\end{document}
更进一步:
\documentclass[UTF8]{ctexart}
\usepackage{geometry}
\usepackage{fancyhdr}
\usepackage{graphicx}
\usepackage{array}
\newcommand{\PreserveBackslash}[1]{\let\temp=\#1\let\=\temp}
\newcolumntype{C}[1]{>{\PreserveBackslash\centering}p{#1}}
\newcolumntype{R}[1]{>{\PreserveBackslash\raggedleft}p{#1}}
\newcolumntype{L}[1]{>{\PreserveBackslash\raggedright}p{#1}}
% \author{ARZhu}
\title{\zihao{2}NOIP 模拟赛}
\date{}
\geometry{left=3.18cm,right=3.18cm,top=2.54cm,bottom=2.54cm}
\begin{document}
\maketitle
\thispagestyle{empty}
\begin{center}
\end{center}
\textbf{一、题目概况}
\begin{center}
\begin{tabular}{*{5}{|C{7em}}|}
\hline
中文题目名称 & 树的构造 & 后缀 & 子序列 & 游戏 \ \hline
可执行文件名 & tree & suffix & subsequence & game\ \hline
输入文件名 & tree.in & suffix.in & subsequence.in & game.in \ \hline
输出文件名 & tree.out & suffix.out & subsequence.out & game.out \ \hline
每个测试点时限 & 1秒 & 2秒 & 1秒 & 1秒 \ \hline
内存上限 & 512MB & 512MB & 512MB & 512MB \ \hline
题目类型 & 传统 & 传统 & 传统 & 传统 \ \hline
\end{tabular}
\end{center}
%\textbf{三、优化开关}
%\begin{center}
%\begin{tabular}{*{4}{|C{9em}}|}
%\hline
% 对于C++语言 & -O2\ -lm & -O2\ -lm & -O2\ -lm \ \hline
% 对于C语言 & -O2\ -lm & -O2\ -lm & -O2\ -lm \ \hline
% 对于pascal语言 & -O2 & -O2 & -O2 \ \hline
%\end{tabular}
%\end{center}
\textbf{注意事项:}
\begin{enumerate}
\item{文件名(程序名和输入输出文件名)必须使用英文小写。}
\item{C++中函数main()的返回类型必须是int,程序正常结束时的返回值必须是0。}
\item{评测时采用的机器配置为:????,内存??G,上述时限以此配置为准。}
\end{enumerate}
\newpage
\setcounter{page}{1}
\pagestyle{plain}
\pagenumbering{arabic}
% T1
\newpage
\section{树的构造}
\begin{center}
\tt\large{tree}
\end{center}
\subsection{问题描述}
\subsection{输出格式}
\subsection{输入输出样例1}
\subsubsection{输入样例}
\subsubsection{输出样例}
\subsection{约定和数据范围}
\textbf{「本题采用捆绑测试」}
\begin{itemize}
\item { \texttt{Subtask} $1(25\%)$:}
\item { \texttt{Subtask} $2(15\%)$:}
\item { \texttt{Subtask} $3(30\%)$:}
\item {\texttt{Subtask} $4(30\%)$:}
\end{itemize}
% T2
\newpage
\section{后缀}
\begin{center}
\tt\large{suffix}
\end{center}
\subsection{问题描述}
\subsection{输入格式}
\subsection{输出格式}
\subsection{输入输出样例1}
\subsubsection{输入样例}
\subsubsection{输出样例}
\subsubsection{样例解释}
\subsection{约定和数据范围}
\textbf{「本题采用捆绑测试」}
\begin{itemize}
\end{itemize}
% T3
\newpage
\section{子序列}
\begin{center}
\tt\large{subsequence}
\end{center}
\subsection{问题描述}
\subsection{输入格式}
\subsection{输出格式}
输出一行一个数表示答案。
\subsection{输入输出样例1}
\subsubsection{输入样例}
\subsubsection{输出样例}
\subsection{输入输出样例2}
\subsubsection{输入样例}
\subsubsection{输出样例}
\subsection{约定和数据范围}
%%%% 表格模板
\begin{center}
\begin{tabular}{|C{6em}|C{2.5em}|C{2.5em}|C{2.5em}|C{2.5em}|C{2.5em}|C{2.5em}|C{2.5em}|C{2.5em}|C{2.5em}|C{2.5em}|}
\hline
\textbf{测试点编号} & $1$ & $2$ & $3$ & $4$ & $5$ & $6$ & $7$ & $8$ & $9$ & $10$ \ \hline
\textbf{$n \leq $} & $10$ & $300$ & $300$ & $2000$ & $2000$ & $10^6$ & $10^6$ & $10^6$ & $10^6$ & $10^6$ \ \hline
\textbf{特殊性质} & \texttt{无} & \texttt{无} & \texttt{无} & \texttt{无} & \texttt{无} & \texttt{A} & \texttt{B} & \texttt{无} & \texttt{无} & \texttt{无} \ \hline
\end{tabular}
\end{center}
% T4
\newpage
\section{游戏}
\begin{center}
\tt\large{game}
\end{center}
\subsection{问题描述}
\subsection{输入格式}
\subsection{输出格式}
\subsection{输入输出样例1}
\subsubsection{输入样例}
\subsubsection{输出样例}
\subsection{输入输出样例2}
\subsubsection{输入样例}
\subsubsection{输出样例}
\subsection{约定和数据范围}
\begin{itemize}
\item { \texttt{Subtask} $1(10\%)$:$n=1$。}
\item { \texttt{Subtask} $2(30\%)$:$\sum s_i \leq 5000$。}
\item { \texttt{Subtask} $3(35\%)$:$\sum s_i \leq 10^5$,依赖 \texttt{Subtask} $2$。}
\item { \texttt{Subtask} $4(15\%)$:$n \leq 50$,依赖 \texttt{Subtask} $1$。}
\item { \texttt{Subtask} $5(10\%)$:无特殊限制,依赖 \texttt{Subtask} $3,4$。}
\end{itemize}
\end{document}
#import "@preview/fuzzy-cnoi-statement:0.1.1": *;
// 以下有大量 Fancy 的设置项。你可以根据需求,注释掉你不需要的内容,或者将你需要的内容取消注释。
#let prob-list = (
(
name: "圆格染色", // 题目名
name-en: "color", // 英文题目名,同时也是目录
time-limit: "1.0 秒", // 每个测试点时限(会显示为 $1.0$ 秒)
memory-limit: "512 MiB", // 内存限制(显示同上)
test-case-count: "10", // 测试点数目(显示同上)
test-case-equal: "是", // 测试点是否等分
year: "2023", // 你可以添加自定义的属性
),
// 实际上必需的项只有 name-en
// 下面是一些花活
(
name: "桂花树",
name-en: "tree",
type: "交互型", // 题目类型
time-limit: "0.5 秒",
memory-limit: "512 MiB",
test-case-count: "10",
test-case-equal: "是",
year: "2023",
// submit-file-name 为提交文件名,可以为 str、content 或一个 extension:str=>content 的函数
// submit-file-name: e => {
// show raw: set text(size: 0.8em)
// raw("tree." + e)
// } // 将其字体变小
),
(
name: "深搜",
name-en: "dfs",
type: "提交答案型",
executable: [无],
input: [`dfs`$1~10$`.in`], // 输入文件名
output: [`dfs`$1~10$`.out`], // 输出文件名
test-case-count: "10",
test-case-equal: "是",
submit-file-name: [`dfs`$1~10$`.out`],
),
(
name: "asdasd",
name-en: "dfs",
type: "提交答案型",
executable: [无],
input: [`dfs`$1~10$`.in`], // 输入文件名
output: [`dfs`$1~10$`.out`], // 输出文件名
test-case-count: "10",
test-case-equal: "是",
submit-file-name: [`dfs`$1~10$`.out`],
),
)
#let contest-info = (
name: "全国中老年信息学奥林匹克竞赛",
name-en: "4202 PION FCC", // 似乎也可以当成副标题用
// round: "第一试",
time: "时间:2023 年 7 月 24 日 08:00 ~ 13:00",
// author: "破壁人五号"
)
#let (init, title, problem-table, next-problem, filename, current-filename, current-sample-filename, data-constraints-table-args) = document-class(
contest-info,
prob-list,
// custom-fonts 参数可以更改字体,字典各项的键值为:mono、serif、cjk-serif、cjk-sans、cjk-mono、cjk-italic,值为字体名。你可以只传入部分项。默认分别为:
// - Consolas
// - New Computer Modern
// - 方正书宋(FZShuSong-Z01S)
// - 方正黑体(FZHei-B01S)
// - 方正仿宋(FZFangSong-Z02S)
// - 方正楷体(FZKai-Z03S)
// header 参数可以自定义页眉,你需要传入一个 (contest-info, current-problem) => content 的函数。
// footer 参数可以自定义页脚,你需要传入一个 (contest-info, current-problem) => content 的函数。
)
#show: init
#title()
#problem-table(
// 默认会显示以下行(括号内为默认值,打星号的在没有题目有这一项时不会显示):
// - name 题目名称(无)
// - type 题目类型(传统型)
// - name-en 目录
// - executable 可执行文件名(默认为目录名)
// - input 输入文件名(默认为目录名 + ".in")
// - output 输出文件名(默认为目录名 + ".out")
// - * time-limit 每个测试点时限(无)
// - * memory-limit 内存限制(无)
// - * test-case-count 测试点数目(10)
// - * subtask-count 子任务数目(1)
// - * test-case-equal 测试点是否等分(是)
//
// 一般来说,默认显示的行的设置是够用的。但如果你希望增加更多行,或者当你有太多题目需要展示,你可能需要 extra-rows 参数来添加新的行。
// extra-rows 也可以覆盖掉默认的行。其在题目过多、需要将特定行的字体变小时尤其有用。
extra-rows:(
year: ( // 对应的 field 名
name: "年份", // 显示的名字;可以用 content(调整字号等)
wrap: text, // 显示的样式:若题目的这一项是 str,则显示为 wrap(str),否则会直接显示这一项。默认为 text。
always-display: false, // 是否总是显示:若为 false,则至少要有一个题目有这一项才会显示。默认为 false。
default: "2023" // 默认值,默认为“无”。你也可以传入一个函数,其接受一个参数,为当前题目的信息,返回一个 str 或 content。
),
contest: (
name: "赛事",
wrap: text.with(fill: blue), // 你也可以在这里设置更小的字体
always-display: true,
default: "NOI"
),
setter: (
// name: text(size: 0.8em)[出题人], // 也许你需要更小的字号
name: "出题人",
always-display: true,
default: p => { p.name-en + "的出题人" }
),
foo: (
name: "bar",
wrap: text,
default: "这一行不会显示"
)
),
// 提交源程序文件名的列表,每一种语言为 (语言名, 文件后缀名) 的二元组,或 (语言名, 文件后缀名, 首列字体大小) 的三元组。若 problem 没有指明 submit-file-name,则用题目英文名与后缀名拼接。
languages:(
("C++", "cpp"),
("D++", "dpp"),
// ("D++", "dpp", 0.8em), // 更小的字号
),
// 各个语言的编译选项,每一种语言为 (语言名, 编译选项) 的二元组,或 (语言名, 编译选项, 首列字体大小) 的三元组。
compile-options: (
("C++", "-O2 -std=c++20 -DOFFLINE_JUDGE"),
)
)
*注意事项(请仔细阅读)*
+ 文件名(程序名和输入输出文件名)必须使用英文小写。
+ C++ 中函数 main() 的返回值类型必须是 int,程序正常结束时的返回值必须是 0。
+ 因违反以上两点而出现的错误或问题,申诉时一律不予受理。
+ 若无特殊说明,结果的比较方式为全文比较(过滤行末空格及文末回车)。
+ 选手提交的程序源文件必须不大于 100KB。
+ 程序可使用的栈空间内存限制与题目的内存限制一致。
+ 只提供 Linux 格式附加样例文件。
+ 禁止在源代码中改变编译器参数(如使用 \#pragma 命令),禁止使用系统结构相关指令(如内联汇编)和其他可能造成不公平的方法。
// T1
#next-problem()
== 题目描述
输入两个正整数 $a, b$,输出它们的和。
你可以*强调一段带 $f+or+mu+l+a$ 的文本*。用 `#underline` 加 ``` `` ``` 来实现 #underline[`underlined raw text`]。
+ 第一点
+ 第二点
- 第一点
- 列表可以嵌套
- 但目前,有序列表和无序列表的互相嵌套会有缩进上的问题。
- 第二点
- 第二点的第一点
- 第二点的第二点
== 输入格式
从文件 #current-filename("in") 中读入数据。// 自动获取当前题目的输入文件名
输入的第一行包含两个正整数 $a, b$,表示需要求和的两个数。
== 输出格式
输出到文件 #filename[color.out] 中。
输出一行一个整数,表示 $a+b$。
== 样例1输入
// 从文件中读取样例
#raw(read("color1.in"), block: true)
== 样例1输出
// 或者直接写在文档中
text
13
== 样例1解释
figure(caption: "凹包")[#image("fig.png", width: 40%)]<aobao>
如@aobao,这是一个凹包。
for (i,case) in range(2, 8).zip((
$1 tilde 5$,
$6 tilde 9$,
$10 tilde 13$,
$14 tilde 17$,
$18 tilde 19$,
$20$)){[
== 样例#{i+2}
见选手目录下的 #current-sample-filename(i, "in") 与 #current-sample-filename(i, "ans")。
这个样例满足测试点 #case 的条件限制。
]}
== 数据范围
对于所有测试数据保证:$1 <= a,b <= 10^9$。
figure(
table(
columns: 4,
..data-constraints-table-args, // 默认的针对数据范围的三线表样式
table.header(
[测试点编号], $n,m <=$, $q<=$, [特殊性质],
),
$1 tilde 5$, $300$, $300$, table.cell(rowspan:2)[无],
$6 tilde 9$, table.cell(rowspan:4)[$10^5$], $2000$,
$10 tilde 13$, table.cell(rowspan:4)[$10^5$], [A],
$14 tilde 17$, [B],
$18 tilde 19$, table.cell(rowspan:2)[无],
$20$, $10^9$,
)
)
特殊性质 A: 你可以像上面这样创建复杂的表格。
// T2
next-problem()
这是一道交互题。
== 题目描述
lorem(50)
== 实现细节
请确保你的程序开头有 `#include "tree.h"`。
int query(int x, int y);
void answer(std::vector ans);
g++ count.cpp -c -O2 -std=c++14 -lm && g++ count.o grader.o -o count
我能吞下玻璃而不伤身体。
- 赵钱孙李周吴郑王,冯陈楮卫蒋沈韩:
- 杨朱秦尤许何吕施张孔。
- 曹严华金魏陶姜戚谢。
- 邹喻柏水窦章云苏潘葛奚。
- 范彭郎鲁韦昌马苗凤花,方俞任袁柳酆鲍史唐费廉岑薛雷。
- 贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余,元卜顾孟平黄和穆萧尹姚邵湛汪,祁毛禹狄米贝明臧计伏成戴。
== 评分标准
lorem(50)
lorem(100)
== 数据范围
lorem(50)
// T3
next-problem()
== 题目描述
lorem(50)
== 输入格式
从文件 #filename[dfs$1~10$.in] 中读入数据。
lorem(50)
== 输出格式
输出到文件 #filename[dfs$1~10$.out] 中。
lorem(50)
== 数据范围
对于所有测试数据保证:$1 <= n <= 10^5$。
// T4
next-problem()
== 题目描述
lorem(50)
== 输入格式
从文件 #filename[dfs$1~10$.in] 中读入数据。
lorem(50)
== 输出格式
输出到文件 #filename[dfs$1~10$.out] 中。
lorem(50)
== 数据范围
对于所有测试数据保证:$1 <= n <= 10^5$。
```