#P10172. 「OICon-02」Pick Stone

「OICon-02」Pick Stone

题目描述

小 S 有一个 n×mn\times m 的棋盘。初始每个位置都有一个棋子。每次,小 S 可以取走一个周围(四连通)被取走棋子数不超过 11 的棋子。求小 S 最多能取走多少棋子,并构造一种合法的取棋子方案。

输入格式

一行,两个正整数 n,mn,m,表示棋盘大小。

输出格式

第一行一个正整数,表示最多能取走的棋子数 ansans

接下来 nn 行,每行 mm1ans-1\sim ans 之间的整数。每个位置的数表示这个位置的棋子是第几个取走的。如果该位置的棋子没被取走,请输出 1-1

2 2
3
1 2
3 -1
3 5
12
2 3 4 5 6
1 -1 12 -1 7
8 9 -1 11 10

提示

样例解释

对于样例 11,取出 (1,1)(1,1) 时周围有 00 个已取出位置,取出 (1,2),(2,1)(1,2),(2,1) 时周围有 11 个已取出位置,故原构造符合要求。

容易证明没有更优答案。

数据范围

本题采用捆绑测试。

Subtask\text{Subtask} 特殊性质 Score\text{Score}
11 n=1n=1 2020
22 n=2n=2 3030
33 n=3n=3 5050

对于 100%100\% 的数据:1n3\bm{1\leq n\leq3}1m1051\leq m\leq10^5

如果你答对了第一问最多能取走的棋子数而没有正确地构造,你将获得 70%70\% 的分值。一个子任务你的得分是所有测试点得分的最小值。注意,你仍需要按格式输出 n×mn\times m 个数表示构造方案,我们推荐你全部输出 1-1

保证 checker.cpp 在符合格式要求的输出下用时不超过 0.50.5 秒。