#P11025. [COTS 2020] 辣椒 Sadnice

    ID: 10581 Type: RemoteJudge 3000ms 500MiB Tried: 0 Accepted: 0 Difficulty: 6 Uploaded By: Tags>2020Special JudgeO2优化CEOI(中欧)COCI(克罗地亚)

[COTS 2020] 辣椒 Sadnice

题目背景

译自 Izborne Pripreme 2020 (Croatian IOI/CEOI Team Selection) D1T3。3s,0.5G\texttt{3s,0.5G}

题目描述

圆在花园里种了辣椒。花园可以被描述为一张 (N+1)×(M+1)(N+1)\times (M+1) 的网格图,其中辣椒被种在格点上。她还用 [(N+1)×(M+1)1][(N+1)\times (M+1)-1] 条绳索连接相邻的格点,使得任意两株辣椒都能通过绳索互相到达。换句话说,绳索构成了这个网格图的生成树上的边。

定义两棵辣椒连通,当且仅当它们通过绳索直接或间接相连。

圆知道,晚上焰要来搞破坏。焰会在水平方向或者竖直方向划一刀,将划过的绳索全部切断。切断后,辣椒植株会被分成几个连通块。焰会让连通块的数量尽量多。

为了最小化损失,圆找来了你。她想要知道:怎么安排绳索,才能使得被切断后连通块的数量最小?

输入格式

一行两个正整数 N,MN,M

输出格式

输出 (2N+1)(2N+1) 行,每行 (3M+1)(3M+1) 个字符。

其中,第 (2i1)(2i-1) 行的第 (3j2)(3j-2) 个字符代表点 (i,j)(i,j)(第 ii 行第 jj 列的植株),用 o(ASCII 111)表示。

对于同一行的两个点 (i,j),(i,j+1)(i,j),(i,j+1),若有边,则用 --(ASCII 45)填充它们之间的两个空格;否则不填充。

对于同一列的两个点 (i,j),(i+1,j)(i,j),(i+1,j),若有边,则用 |(ASCII 124)填充它们之间的一个空格;否则不填充。

未填充的区域均用空格补齐。不要输出多余的空格和空行。

可参阅样例输出。

2 2
o--o  o
|     |
o  o--o
|     |
o--o--o
2 2
o--o--o
|
o  o--o
|     |
o--o--o

提示

评分方式

若你输出的解是最优解,得该测试点的满分。

否则,按照如下方式计算得分倍数:

$$K=0.75\times \max\left\{\left(\frac{A-1}{B-1}\right)^4,1-\left(1-\frac{1}{(B-A)^2}\right)^6\right\} $$

其中 AA 为最优的答案,BB 为你构造方案的答案。

你将获得 KK 倍测试点得分的分数。子任务得分为子任务内测试点得分最小值。

例如,样例 11 输出得满分。样例 22 输出得 75%75\% 的分数。

数据范围

对于 100%100\% 的数据,保证 1NM10001\le N\le M\le 1\, 000

子任务编号 N,MN,M\le 特殊性质 得分
1 1 10001\,000 A 15 15
2 2 B
3 3 33 5 5
4 4 1010 10 10
5 5 100100 20 20
6 6 10001\, 000 35 35
  • 特殊性质 A:N=MN=M
  • 特殊性质 B:2N=M2N=M