假如你想使题面美观,请认真研究第一、二部分。
假如你想学习如何出数据,请直接翻到第三部分。(优快云
右边有目录)
第一部分 Markdown
如果想要认真学习Markdown
语法,请看这些文章:
- Markdown的使用-标题
- Markdown的使用-正文
- Markdown的使用-代码
- Markdown的使用-列表
- Markdown的使用-超链接与图片
- Markdown的使用-表格
- Markdown的使用-引用
- Markdown的使用-其他
假如你嫌多的话,下面是一部分比较常用的Markdown
语法现象。
换行
首先,在Markdown
中,换行是一个重点,留下一个或多个空行表示你需要一个换行符。
例子:
N方过百万,暴力碾标算。
骗分过样例,暴力出奇迹。
N方过百万,暴力碾标算。
骗分过样例,暴力出奇迹。
效果:
N方过百万,暴力碾标算。
骗分过样例,暴力出奇迹。
N方过百万,暴力碾标算。骗分过样例,暴力出奇迹。
超链接
[链接描述](链接地址)
例子:
[洛谷](https://www.luogu.org)
效果:
图片
格式:

注意!
是半角字符,ASCII(!)=33
。
例子:

效果:
图片&链接
[](链接地址)
例子:
[](https://www.luogu.org/space/show?uid=38502)
点击以进入作者的个人空间。
效果:
点击以进入作者的个人空间。
关于自定义图片
格式:
https://img.shields.io/badge/一段·文字-二段·文字-颜色(用英文).svg
例子:


效果:
表格
格式:
|标题|标题|标题|
|----|---|----|
|文本|文本|文本|
|文本|文本|文本|
文字的对齐方式
格式:
|左对齐标题|右对齐标题|居中对齐标题|
|:--------|--------:|:---------:|
|短文本|中等文本|稍微长一点的文本 |
|稍微长一点的文本|短文本|中等文本 |
例子:
|转义字符|意义|
|:---:|:---:|
|\a|响铃(BEL)|
|\b|退格(BS) ,将当前位置移到前一列|
效果:
左对齐标题 | 右对齐标题 | 居中对齐标题 |
---|---|---|
短文本 | 中等文本 | 稍微长一点的文本 |
稍微长一点的文本 | 短文本 | 中等文本 |
转义字符 | 意义 |
---|---|
\a | 响铃(BEL) |
\b | 退格(BS) ,将当前位置移到前一列 |
注意事项
- 在表格语句中,存在于
-
,:
,|
之间的空格字符将会被忽略,不影响表格的布局; - 不设定对齐方式时,标题默认居中对齐,内容默认居左对齐;
-:
表示内容和标题栏居右对齐,:-
表示内容和标题栏居左对齐,:-:
表示内容和标题栏居中对齐。- 设定对齐方式时,
-
号的数量不限,但至少有 1 1 1个; - 内容和
|
之间的多余空格会被忽略,每行第一个|
和最后一个|
可以省略。
第二部分 学习与使用LaTeX
看大部分题目(洛谷上的),都有很多数学公式,例如:
e = lim n → ∞ ( 1 + 1 n ) n e=\lim_{n \to \infty}(1+\frac{1}{n})^{n} e=n→∞lim(1+n1)n
∑ i = 1 n i = n ( n + 1 ) 2 \sum^{n}_{i=1} i =\frac{n(n+1)}{2} i=1∑ni=2n(n+1)
它们就是使用了 LaTeX \LaTeX LATEX的结果。
LaTex初步
首先,你得会打 LaTeX \LaTeX LATEX。
源代码:
$\LaTeX$
效果:
LaTeX \LaTeX LATEX
在条件不允许的情况下,应该交替使用大小写:LaTeX;
LaTeX \LaTeX LATEX把公式分为两种:
- 行内公式:
$<fomula>$
,位于文字中间 - 行外公式(其实我也不知道它叫什么):
$$<fomula>$$
,独立成行且居中。
注:fomula n. 公式
例子:
公式$a$不是我写的。
但公式$$asjdaisfj$$是我的杰作。
效果:
公式 a a a不是我写的。
但公式 a s j d a i s f j asjdaisfj asjdaisfj是我的杰作。
上下标
难以用文字表述,实践是检验真理的唯一标准,我们直接演示。
例子:
上标:
$a^{10}=9$
$n≤10^{50}$
下标:
$a_{i}$
$a_{1},a_{2},a_{3},...,a_{n}$
混合:
$a^{9}_{5}$
$a^{2^{5}}$
$a_{i_{j}}$
效果:
上标:
a 10 = 9 a^{10}=9 a10=9
n ≤ 1 0 50 n≤10^{50} n≤1050
下标:
a i a_{i} ai
a 1 , a 2 , a 3 , . . . , a n a_{1},a_{2},a_{3},...,a_{n} a1,a2,a3,...,an
混合:
a 5 9 a^{9}_{5} a59
a 2 5 a^{2^{5}} a25
a i j a_{i_{j}} aij
基础大型符号(运算符)
其实常用的就两个, ∑ \sum ∑表示累加, ∏ \prod ∏表示累乘。
例子:
单个符号
$\sum$
$\prod$
行内公式
$\sum^{n}_{i=1}i$
$n!=\prod^{n}_{i=1}$
行外公式
$$\sum^{n}_{i=1}i$$
$$n!=\prod^{n}_{i=1}$$
效果:
单个符号
∑ \sum ∑
∏ \prod ∏
行内公式
∑ i = 1 n i \sum^{n}_{i=1}i ∑i=1ni
n ! = ∏ i = 1 n n!=\prod^{n}_{i=1} n!=∏i=1n
行外公式
∑ i = 1 n i \sum^{n}_{i=1}i i=1∑ni
n ! = ∏ i = 1 n i = ∏ i = 2 n i n!=\prod^{n}_{i=1}i=\prod^{n}_{i=2}i n!=i=1∏ni=i=2∏ni
如果还想学习更多关于 LaTeX \LaTeX LATEX的公式,请访问 LaTeX \LaTeX LATEX数学公式大全——别人的洛谷博客。
第三部分 题目数据
首先,题目的数据最好在Linux
系统中生成,推荐使用Ubuntu
或者NOI linux
虚拟机(方便文件传输)。
Linux
下生成数据
下面的操作以Ubuntu
为例。
基础知识
在 L i n u x Linux Linux系统中,按 C t r l + A l t + T Ctrl+Alt+T Ctrl+Alt+T即可打开终端。
同时,在图形界面下,在桌面按鼠标右键,选择打开终端选项也可打开终端。
终端打开后如下图所示。
常用命令
-
ls
- 显示当前目录的所有文件与目录(格式: l s ls ls)
ls
- 显示指定目录的所有文件与目录(格式: l s ls ls+路径)
ls /home
-
cd
进入指定目录(格式: c d cd cd+路径)
cd /home/
-
mkdir
新建子目录(格式: m k d i r mkdir mkdir+子目录名称)
makdir C++
提示:若子目录已存在,则会提示:
无法创建目录"C++": 文件已存在
其中"C++"为子目录名称。
此时可加上参数 − p -p −p确保目录名称存在,不存在的就建一个。
mkdir C++ -p
-
pwd
显示当前工作目录的绝对路径(格式: p w d pwd pwd)
pwd
-
cp
将一个目录或文件复制到另一个目录(格式: c p cp cp+文件(或目录)+目标目录)
cp ./C++ ./A
-
mv
将一个目录或文件移动到另一个目录(格式: m v mv mv+文件(或目录)+目标目录)
mv ./C++ ./A
-
rm
删除文件或目录,参数:
-
− i -i −i 删除前逐一询问确认。
-
− f -f −f 即使原档案属性设为只读,也直接删除,无需逐一确认。
-
− r -r −r 将目录及以下之档案都删除。
删除文件可以直接无参数执行,删除目录则需要使用参数 − r -r −r。
通常我们可以直接使用 − r f -rf −rf参数直接删除指定的目录或文件。
(格式: r m rm rm+参数+文件或目录的名称)
rm -rf ./A
-
-
clear
清空终端屏幕(格式: c l e a r clear clear)
clear
提示: C t r l + L Ctrl+L Ctrl+L有同样的功效。
-
reset
真正地清空终端屏幕(格式: r e s e t reset reset)
reset
提示:这个命令执行起来有点慢。
-
time
统计运行时间(格式: t i m e time time+将要运行的文件)
time ./std #统计名为std的文件的运行时间
-
diff
比较文件差异, − b -b −b参数忽略行末空格
diff -b A.out A.ans
具体过程
首先,进入Ubuntu
虚拟机后,先要安装g++
(C++
的编译器)。
所以我们执行如下操作:
- 打开终端(按
Ctrl+Alt+T
); - 输入命令;
sudo apt install g++
- 输入当前用户的密码(没有回显,直接输入即可)并按
Enter
; - 根据提示进行选择(你可以一路按
Enter
); - 完成。
再然后,自己写好三个文件data.cpp,std.cpp,work.cpp
,放在同一目录下。
data.cpp
data.cpp
是生成数据程序的源代码,一般我们使用随机数生成器。
std.cpp
std.cpp
是这题的标准程序。
work.cpp
work.cpp
是生成数据的主体,它的代码如下:
#define NUMBER_OF_TEST 10
//表示测试点个数
#define NAME_OF_PROBLEM "count"
//表示问题名称,一定要有双引号(半角),题目名称长度不可超过2^10
#include<cstdio>
#include<cstdlib>
char str[2048];
int main(void){
register int i;
system("g++ data.cpp -o data");
for(i=1;i<=NUMBER_OF_TEST;++i){
sprintf(str,"./data > %s%d.in",NAME_OF_PROBLEM,i);
system(str);
}
system("g++ std.cpp -o std");
for(i=1;i<=NUMBER_OF_TEST;++i){
sprintf(str,"./std < %s%d.in > %s%d.out",NAME_OF_PROBLEM,i,NAME_OF_PROBLEM,i);
system(str);
}
return 0;
}
编辑好三个文件之后,在文件夹内打开终端(或打开终端并cd
到此文件夹中),输入如下命令:
g++ work.cpp -o work
./work
如果不出意外的话,数据就会出现在文件夹内。打包上传即可。
可能上面的内容比较生硬,我们找一个具体例子(题目combination
)来看。
例子:
题面:(Markdown
原文,请自己查看)
## combination
### 题目背景
本题考查阅读理解能力,是一道水题(假如你读懂了题目的话)。
本题难度。
### 题目描述
给定正整数$n,m$,求解$C ^ {m} _ {n}$是奇数还是偶数。
### 输入输出格式
#### 输入格式:
输入共一行,为两个整数$n,m$。
#### 输出格式:
一行,若$C ^ {m} _ {n}$为奇数输出`odd`,否则输出`even`。
### 输入输出样例
#### 输入样例#1:
```
2 1
```
#### 输出样例#1:
```
even
```
#### 输入样例#2:
```
1 1
```
#### 输出样例#2:
```
odd
```
### 说明
本题共$10$个测试点。
对于$70\%$的数据,$1 \leq m \leq n \leq 10^{6}$;
对于$100\%$的数据,$1 \leq m \leq n \leq 10^{17}$;
时空限制:$1 \text {s} / 256 \text {MB}$。
提示:
$$ C^{m}_{n} \equiv C^{m/p}_{n/p} \times C^{m\%p}_{n\%p} (mod \ p) \text {(p 为素数)} $$
data.cpp
#include<cstdio>
int main(void){
printf("%d %d\n",rand(),rand());
return 0;
}
std.cpp
#include<cstdio>
long long n,m;
int main(void){
scanf("%lld%lld",&n,&m);
if((n&m)==m)
puts("odd");
else
puts("even");
return 0;
}
work.cpp
#define NUMBER_OF_TEST 50
//表示测试点个数
#define NAME_OF_PROBLEM "combination"
//表示问题名称,一定要有双引号(半角),题目名称长度不可超过2^10
#include<cstdio>
#include<cstdlib>
char str[2048];
int main(void){
register int i;
system("g++ data.cpp -o data");
for(i=1;i<=NUMBER_OF_TEST;++i){
sprintf(str,"./data > %s%d.in",NAME_OF_PROBLEM,i);
system(str);
}
system("g++ std.cpp -o std");
for(i=1;i<=NUMBER_OF_TEST;++i){
sprintf(str,"./std < %s%d.in > %s%d.out",NAME_OF_PROBLEM,i,NAME_OF_PROBLEM,i);
system(str);
}
return 0;
}