Algorithm 算法谜题的测试用例

Algorithm 算法谜题的测试用例,algorithm,testing,testcase,Algorithm,Testing,Testcase,下面是问题,请有人给我一些测试用例和输出。我的解决方案在所有测试用例的时限内,但给出了错误的答案 圆总和(30分) 有N儿童坐在一个圆圈上,按顺时针方向编号1,2,…,N。第i个孩子有一张写有数字ai的纸。他们玩以下游戏: 在第一轮中,编号为x的孩子将其邻居的数字相加 在第二轮中,下一个孩子按顺时针顺序将他的邻居的数字相加,依此类推 游戏在M回合结束后结束 输入: 第一行包含测试用例的数量TT案例如下。测试用例的第一行包含两个空格分隔的整数N和M。下一行包含N整数,第i个数字为ai 输出: 对于

下面是问题,请有人给我一些测试用例和输出。我的解决方案在所有测试用例的时限内,但给出了错误的答案

圆总和(30分)

N
儿童坐在一个圆圈上,按顺时针方向编号
1,2,…,N
。第i个
孩子有一张写有数字
ai
的纸。他们玩以下游戏:

在第一轮中,编号为
x
的孩子将其邻居的数字相加

在第二轮中,下一个孩子按顺时针顺序将他的邻居的数字相加,依此类推

游戏在
M
回合结束后结束

输入: 第一行包含测试用例的数量
T
<代码>T
案例如下。测试用例的第一行包含两个空格分隔的整数
N
M
。下一行包含
N
整数,第i个
数字为
ai

输出: 对于每个测试用例,输出N行,每行有N个整数。第i行
i
上的
jth
整数包含第j个孩子在游戏开始时玩第一轮时的数字。在每个测试用例后输出一个空行,最后一个测试用例除外。因为数字可能非常大,所以将其按模输出
100000007

限制条件:

1 <= T <= 15
3 <= N <= 50
1 <= M <= 10^9
1 <= ai <= 10^9
样本输出:

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 

如果它对小测试用例似乎没有问题,但不是全部,我猜您可能有溢出问题

确保你不是

  • 在每次加法后计算模数,而不是仅仅在三个数相加后
  • 使用64位数字。这仍然需要模量,但不是经常需要

100000007非常接近有符号32位数字的限制(214748367)。您可以在不溢出的情况下添加调制数,但不能添加三个。

如果对小测试用例(但不是所有测试用例)这样做似乎还可以,我想您可能有溢出问题

确保你不是

  • 在每次加法后计算模数,而不是仅仅在三个数相加后
  • 使用64位数字。这仍然需要模量,但不是经常需要

100000007非常接近有符号32位数字的限制(214748367)。您可以在不溢出的情况下添加调制数,但不能添加三个。

假设ai=10^9,m=10^9,n太小,这意味着最终ai大约为10^18。64位数字就足够了,因为64位符号数等于2^63=8*(2^10)^6=8*10^18最大可能的总和:100000006+100000006+100000006=3000000018>2147483647=2^31-1(有符号32位数字的最大值),这意味着它将环绕到-1294967278。如果改为((1000000006+1000000006)%1000000007+1000000006)%100000007,你不会有这个问题。你假设ai=10^9,m=10^9,n太小,这意味着最终ai大约是10^18。64位数字就足够了,因为64位符号数等于2^63=8*(2^10)^6=8*10^18最大可能的总和:100000006+100000006+100000006=300000018>2147483647=2^31-1(有符号32位数字的最大值),这意味着它将环绕到-1294967278。如果改为((1000000006+1000000006)%1000000007+1000000006)%1000000007,则不会出现此问题。
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