2012-01-03 32 views
2

以下是Interviewstreet的问题我没有从他们的网站获得任何帮助,所以在这里提问。我对算法/解决方案不感兴趣,但我不理解他们给出的解决方案作为他们第二个输入的例子。任何人都可以帮助我理解问题陈述中指定的第二个输入和输出。Circle Summation(30分)InterviewStree益智

圈总和(30分)

N孩子沿着圆圈坐着,编号顺时针1,2,...,Nith孩子的一张纸上写着一个号码ai。他们玩下面的游戏:

在第一轮中,编号为x的孩子在他的数字中增加了他的邻居的数量总和。

在第二轮中,顺时针顺序的下一个孩子将其邻居的数量总和加到他的数字上,依此类推。

游戏结束后M已发挥。

输入: 第一行包含T,测试用例的数量。 T个案如下。测试用例的第一行包含两个空间分离的整数NM。下一行包含N整数,ith号码为ai

输出: 对于每个测试案例,输出N行,每行有N个整数。 ith行上的jth整数包含第j个孩子结束时的数字,如果游戏从第一轮玩i开始。在最后一个测试用例之后输出一个空白行。由于数字可能非常大,因此输出模1000000007

限制条件:

1 <= T <= 15 
3 <= N <= 50 
1 <= M <= 10^9 
1 <= ai <= 10^9 

样品输入:

2 
5 1 
10 20 30 40 50 
3 4 
1 2 1 

样本输出:

80 20 30 40 50 
10 60 30 40 50 
10 20 90 40 50 
10 20 30 120 50 
10 20 30 40 100 



23 7 12 
11 21 6 
7 13 24 

回答

3

这里是第二测试情况的​​说明。我将使用符号(a,b,c)表示孩子有数字a,孩子2有数字b,孩子三有数字c。一开始,职位总是(1,2,1)。

如果第一个孩子是第一次来概括它的邻居,该表经过以下几种情况(我会放一个星号在刚添加的两个相邻数字的孩子前):

(1, 2,1) - >(* 4,2,1) - >(4,* 7,1) - >(4,7,* 12) - >(* 23,7,12)

如果第二个孩子是第一个移动:

(1,2,1) - >(1,* 4,1) - >(1,4,* 6) - >(* 11,4,6) - >(11,* 21,6)

如果第三个孩子是第一个移动,则持续:(1,2,4)→(* 7,2,4)→(7,* 13,4)→(7,13,* 24) )

而且正如您注意到第二种情况的输出正好是以这种方式计算的三个三元组。

希望有所帮助。