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