SP6706 CT101CC - Making Chess Boards

题目描述

国际象棋棋盘的制造行业面临困境,急需你的帮助。人们可能不知道,棋盘其实是由一种极其稀有的克罗地亚棋盘树(_Biggus Mobydiccus_)的树皮制成的。这种树的树皮被剥下后展开成一个巨大的矩形片材,上面是交错的黑白格网。 你的任务是尽可能多地从中裁剪出大方形的棋盘。这里的棋盘指的是一个正方形部分,其边与树皮矩形的边平行,并且按照国际象棋棋盘的模式排布(相邻格子颜色不同)。 每次裁剪时,你都需要选择剩余部分中最大的棋盘。若有多个同样大的棋盘,选择最上面的那个;如仍无法区分,则取最左边的。继续进行裁剪,直到所剩的树皮全部用尽。即使需要切割出 1×1 的小棋盘,也要继续。 以下是一个例子,展示了如何从棋盘树的树皮上切割棋盘的前几个步骤。 ![](http://code.google.com/codejam/contest/images/?image=mcb.png&p=563116&c=619102)

输入格式

输入的第一行是测试用例的数量 **T**。接下来的 **T** 个测试用例中, 每个测试用例都以一行两个整数开始,表示树皮网格的大小:**M** 行 **N** 列。注意,**N** 一定是 4 的倍数。接下来的 **M** 行中,每行由一个长度为 **(N/4)** 的十六进制整数构成,表示该行的颜色信息,这个整数的二进制形式即该行的 **N** 位颜色数据:0 代表黑格,1 代表白格。这些行信息会按从上到下的顺序出现,并且每行的十六进制整数的最高有效位对应该行的最左格。

输出格式

对每个测试用例,输出格式为"Case #x: **K**",其中 x 是测试用例编号(从 1 开始),**K** 是能够裁剪出的不同大小棋盘的数量。接下来的 **K** 行中,每行包含两个整数——棋盘的大小(从大到小排序)和该大小的棋盘数量。

说明/提示

- **1 ≤ T ≤ 100** - **1 ≤ M, N ≤ 100** - **N** 为 4 的倍数。 **本翻译由 AI 自动生成**