CodeGolf:兄弟

Ser*_*pia 16 algorithm console-application

我刚刚参加了拉丁美洲总决赛的2009 ACM ICPC Programming Conest.这些问题适用于巴西,玻利维亚,智利等.

我和我的团队只能在十一个问题中完成两个问题(我认为第一次尝试不错).

这是我们可以完成的.我很想看到代码的任何变化.完整的问题:ps:这些问题也可以在ICPC官方网站上找到.


在ACM的土地上,统治着一个痴迷于秩序的希腊国王.王国有一个长方形,国王将领土划分为一个小矩形县的网格.在临死前,国王将他们的县分配给他们.

国王不知道他的儿子之间的对抗:第一个继承人讨厌第二个而不是其他人,第二个人讨厌第三个而不是其他人,等等......最后,最后一个继承人讨厌第一个继承人,但不是其他继承人.

国王一旦死亡,国王的儿子中的奇怪的竞争就引发了王国的普遍战争.攻击只发生在成对的相邻县之间(相邻的县是那些共享一个垂直或水平边界的县).当X恨Y时,一个县X袭击了邻近的Y县.被攻击的郡总是被征服.所有同时进行的攻击和一系列同时攻击都被称为战斗.经过一定数量的战斗后,幸存的儿子们休战,再也没有战斗过.

例如,如果国王有三个儿子,名为0,1和2,下图显示了在给定的初始土地分配的第一次战斗中发生的事情:

替代文字


INPUT

输入包含几个测试用例.一个测试用例的第一行包含四个整数,N,R,C和K.

  1. N - 继承人数(2 <= N <= 100)
  2. R和C - 土地的尺寸.(2 <= R,C <= 100)
  3. K - 即将发生的战斗次数.(1 <= K <= 100)

继承人由从零开始的连续整数识别.接下来的R行中的每一行都包含由单个空格分隔的C个整数HeirIdentificationNumber(说明继承人拥有这片土地).这是为了布置初始土地.

最后一个测试用例是由单个空格分隔的四个零分隔的行.(退出程序可以这么说)


产量

对于每个测试用例,程序必须打印R行,每行有C个整数,用与输入相同格式的单个空格分隔,表示所有战斗后的土地分布.


Sample Input:                          Sample Output:
3 4 4 3                                2 2 2 0
0 1 2 0                                2 1 0 1 
1 0 2 0                                2 2 2 0
0 1 2 0                                0 2 0 0 
0 1 2 2
Run Code Online (Sandbox Code Playgroud)

另一个例子:

Sample Input:                          Sample Output:
4 2 3 4                                1 0 3
1 0 3                                  2 1 2
2 1 2
Run Code Online (Sandbox Code Playgroud)

mob*_*mob 5

Perl,233个字符

{$_=<>;($~,$R,$C,$K)=split;if($~){@A=map{$_=<>;split}1..$R;$x=0,
@A=map{$r=0;for$d(-$C,$C,1,-1){$r|=($y=$x+$d)>=0&$y<@A&1==($_-$A[$y])%$~
if($p=(1+$x)%$C)>1||1-$d-2*$p}$x++;($_-$r)%$~}@A
while$K--;print"@a\n"while@a=splice@A,0,$C;redo}}
Run Code Online (Sandbox Code Playgroud)

地图保存在一维数组中.这不如二维解决方案优雅,但也更短.包含@A=map{...}@A所有战斗在括号内进行的成语.