「OICon-02」Pick Stone
题目描述
小 S 有一个 $n\times m$ 的棋盘。初始每个位置都有一个棋子。每次,小 S 可以取走一个周围(四连通)被取走棋子数不超过 $1$ 的棋子。求小 S 最多能取走多少棋子,并构造一种合法的取棋子方案。
输入输出格式
输入格式
一行,两个正整数 $n,m$,表示棋盘大小。
输出格式
第一行一个正整数,表示最多能取走的棋子数 $ans$。
接下来 $n$ 行,每行 $m$ 个 $-1\sim ans$ 之间的整数。每个位置的数表示这个位置的棋子是第几个取走的。如果该位置的棋子没被取走,请输出 $-1$。
输入输出样例
输入样例 #1
2 2
输出样例 #1
3
1 2
3 -1
输入样例 #2
3 5
输出样例 #2
12
2 3 4 5 6
1 -1 12 -1 7
8 9 -1 11 10
说明
### 样例解释
对于样例 $1$,取出 $(1,1)$ 时周围有 $0$ 个已取出位置,取出 $(1,2),(2,1)$ 时周围有 $1$ 个已取出位置,故原构造符合要求。
容易证明没有更优答案。
### 数据范围
**本题采用捆绑测试。**
| $\text{Subtask}$ | 特殊性质 | $\text{Score}$ |
|:--:|:--:|:--:|
| $1$ | $n=1$ | $20$ |
| $2$ | $n=2$ | $30$ |
| $3$ | $n=3$ | $50$ |
对于 $100\%$ 的数据:$\bm{1\leq n\leq3}$,$1\leq m\leq10^5$。
如果你答对了第一问最多能取走的棋子数而没有正确地构造,你将获得 $70\%$ 的分值。一个子任务你的得分是所有测试点得分的最小值。注意,你仍需要按格式输出 $n\times m$ 个数表示构造方案,我们推荐你全部输出 $-1$。
保证 `checker.cpp` 在符合格式要求的输出下用时不超过 $0.5$ 秒。