Problem 3B. 破解构造图
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
Problem 3B. 破解构造图
Limits
时间限制:1000ms
内存限制:256MB
Background
在武装了自己之后,小周决定出发探险寻找宝藏。村民小季告诉小周在村庄东面有一座遗迹,里面有许多宝藏。小周很疑惑:那座遗迹难道没有被别人探索过吗?小季表示有很多人想进去探险,但是都被当初的建造者设计的开门机关难住了。
建造者给每个人想进去的人都提供了一张经过加密的内部构造图,只有知道了这个遗迹内部有多少个房间,每个房间有多大,才能破解开门机关进去探险。
就在小周纠结要不要去尝试破解的时候,村庄里的学者朱朱突然冲出屋子,兴奋的跟大家说:我终于破解出构造图上这些数字的意思了!
Description
加密后的构造图是一个 \(n\) 行 \(m\) 列的矩阵,矩阵中的每个数都是 \(0\) 到 \(15\) 中的某个数,代表对应位置的墙壁构造。曾经很多人没有破解出的原因是没有把这些数字转换成二进制,将数字转换成四位二进制数后就可以发现,每个位置的数代表对应方向有没有墙壁。
比如说数字 \(10\) ,它的二进制表示为 \(1010\) ,这意味着这个单元格的 北面 有墙壁, 东面 没有墙壁, 南面 有墙壁, 西面 没有墙壁;所以四位二进制数分别代表着北面,东面,南面,西面有无墙壁,\(1\) 代表有,\(0\) 代表没有。
朱朱讲解完以后询问有谁可以与他一起去探索遗迹,小周立即表示可以同行保护朱朱。来到遗迹门口后,剩下的任务只需要把房间数目和每个房间的大小按 降序排列 后输到开门机关上即可。
Input
第一行两个整数 \(n, m\) , 代表矩阵的行数和列数;
下面 \(n\) 行每行 \(m\) 个整数,每个数都是 \(0\) 到 \(15\) 之间的数,含义见描述。
Output
输出两行,第一行输出一个整数,代表房间的数量;
第二行输出从大到小的若干个整数,代表着按降序排列的每个房间的大小。
Samples
Sample Input
4 5
9 14 11 12 13
5 15 11 6 7
5 9 14 9 14
3 2 14 3 14
Sample Output
5
9 4 4 2 1
样例解释:根据破解规则,构造如下图所示
Data range
对于 50% 数据,\(n = 1\),\( 1 \leq m \leq 10 ^ 3\);
对于 100% 数据,\(1 \leq n \leq 10^3\),\( 1 \leq m \leq 10^3\).
数据保证这个遗迹的边缘总是有墙的。