抓住那只猪02(pig)
题目描述
Y 同学得到了一个大小为 的字符方阵,其中每个位置都填有一个小写英文字母。
已知该方阵满足以下条件:
- 方阵中恰好出现了 种不同的字母;
- 对于每一种出现过的字母 ,恰好有 头与之对应的猪;
- 因而一共恰好有 头猪。
对于字母 对应的那头猪,它只能被放置在字符为 的格子上。
现在,Y 同学需要在方阵中为这 头猪各选出一个位置,并满足以下要求:
- 对于任意一头猪,它所选位置上的字符必须等于该猪对应的字母;
- 每一种字母恰好被选中一次;
- 任意两头猪不能位于同一行;
- 任意两头猪不能位于同一列;
- 任意两头猪不能在八个方向上相邻。更形式化地说,若两头猪分别位于 与 ,则不能同时满足$$\lvert x_1-x_2\rvert \le 1,\ \lvert y_1-y_2\rvert \le 1 $$且 。
请你输出所有满足条件的合法方案,并按字典序从小到大输出。
对于任意一个合法方案,由于共有 头猪且任意两头猪不能位于同一行,因此每一行恰好会选出一个位置。记第 行被选中的列号为 ,则该方案可唯一表示为长度为 的序列
规定方案 的字典序小于方案 ,当且仅当存在最小的正整数 ,满足:
- 对于所有 ,都有 ;
- 且 。
你需要按照上述字典序输出全部合法方案。
坐标从 开始计数,左上角位置记为 。
输入格式
第一行输入一个整数 ,表示方阵的大小,同时也表示猪的数量。
接下来输入 行,每行一个长度为 的字符串,表示该字符方阵。
输出格式
第一行输出一个整数 ,表示合法方案的总数。
接下来输出 行,第 行输出第 个合法方案。
对于每个方案,输出 个整数 ,其中 表示该方案中第 行被选中位置的列号。相邻两个整数之间用一个空格分隔。
所有方案必须按字典序从小到大输出。
样例
样例输入 #1
4
dadb
ddbb
cddd
bddd
样例输出 #1
1
2 4 1 3
样例解释
方阵为:
按题意,每种字母对应一头猪,且任意两头猪不能同行、同列,也不能在八个方向相邻。
样例中的唯一合法方案为:
- 第 行选第 列;
- 第 行选第 列;
- 第 行选第 列;
- 第 行选第 列。
对应序列为:
检查可知:
- 这四个位置上的字母两两对应不同的猪;
- 没有两头猪位于同一行或同一列;
- 也没有两头猪在八个方向相邻。
数据范围与约定
对于 的数据,保证 ,方阵中的字符均为小写英文字母,方阵中恰好出现了 种不同的字符,合法方案总数不超过 。
| 测试点编号 | 分值 | 特殊性质 | |
|---|---|---|---|
| 10 | 特殊性质 A | ||
| 特殊性质 B | |||
| 特殊性质 C | |||
| 20 | 无 | ||
| 30 |
- 特殊性质 A:每种字母在方阵中恰好出现 次。
- 特殊性质 B:对于任意一种字母,其在方阵中的出现次数不超过 。
- 特殊性质 C:合法方案总数不超过 。
京公网安备11010802045784号