#USACO643. [USACO 6.4.3]Wisconsin Squares
[USACO 6.4.3]Wisconsin Squares
威斯康星广场
春天到了威斯康星,是时候把一岁小牛移到一岁牧场,并把去年的周岁牛移到更绿的北四十亩牧场了。
农夫约翰的农场上有五种牛(括号内为缩写):根西牛(A)、泽西牛(B)、海福特牛(C)、黑安格斯牛(D)和长角牛(E)。这些牛群被安置在 16 英亩的牧场上,每英亩一个小牛群,排成一个 4×4 的网格(行列标号如下):
1 2 3 4
+-------
1|A B A C
2|D C D E
3|B E B C
4|C A D E
初始牧场布局中,各牛群数量为:3 个 A、3 个 B、4 个 C、3 个 D、3 个 E。今年的小牛多了一个 D 牛群,少了一个 C 牛群,所以总量变为:3 个 A、3 个 B、3 个 C、4 个 D、3 个 E。
FJ 在将牛群放到牧场网格上时极为谨慎,因为同种牛群靠得太近时它们会捣乱:聚在栅栏边抽烟喝牛奶。当它们在同一格或八个相邻格中的任何一格时,就认为靠得太近。
农夫约翰必须用他那辆老旧的棕色福特皮卡将旧牛群移出牧场,并将新牛群移入牧场。皮卡一次只能载一个小牛群。他开到一个一岁牧场方格,卸下新牛群,装上旧牛群,然后开车到北四十亩地卸下旧牛群。重复这个操作 16 次,然后开车去 Zack's 吃低脂酸奶点心,欣赏熟悉的墙面装饰。
帮助农夫约翰。他必须选择一个正确的替换顺序,使得他永远不会将一个新牛群放入当前已被同种牛群占据或与同种牛群相邻的方格中。当然,一旦旧牛群离开、新牛群到位,他必须根据新布局小心地分开牛群。
非常重要的提示:农夫约翰根据以往经验知道,他必须首先移动 D 牛群。
为农夫约翰找到一种将一岁牛移到新牧场的方法。输出 16 条顺序移动,每条包括牛群类型、行和列,使得奶牛安全移动。
计算最终可能的 4×4 牧场布局总数,以及这些布局可以被创建的总方式数。
程序名称:wissqu
时间限制:5 秒
输入格式
四行,每行四个字母表示初始牧场布局。
样例输入(文件 wissqu.in)
ABAC
DCDE
BEBC
CADE
输出格式
16 行,每行一个牛群类型、行和列。如果有多个解(确实有),你应该输出所有答案连接成的字符串(例如 "D41C42A31 ... D34")在字典序中最小的那个解。
再一行,输出这些布局可以被创建的总方式数。
样例输出(文件 wissqu.out)
D 4 1
C 4 2
A 3 1
A 3 3
B 2 4
B 3 2
B 4 4
E 2 1
E 2 3
D 1 4
D 2 2
C 1 1
C 1 3
A 1 2
E 4 3
D 3 4
14925