URI 联机判断上的运行时错误



我正在 URI OJ 上尝试以下问题

在圣卡塔琳娜州西部地区购买了许多相邻的农场后,Star家族建造了一条道路,依次经过所有农场。序列的第一个场被命名为星 1,第二个星 2,依此类推。然而,住在星1的兄弟生气了,决定做一个星际迷航,以便从他兄弟姐妹的财产中偷羊。但他绝对是疯了。当经过星际i农场时,他只从该农场偷了一只羊(如果有的话(,然后移动到星星i + 1或星星i-1,这取决于星星i中的绵羊数量分别是奇数还是偶数。如果没有他想去的星星,他就会停止跋涉。疯狂的兄弟在星际1开始了他的星际迷航,从自己的农场偷了一只羊。

输入

第一行由单个整数 N (1 ≤ N ≤ 106(组成,表示星星的数量。第二行由 N 个整数组成,使得第 i 个整数 Xi (1 ≤ Xi ≤ 10^6( 表示星 i 中羊的初始数量。

输出

输出一行包含两个整数,使第一个表示被疯哥攻击的星星数量,第二个表示未被盗羊的总数。

我尝试使用蛮力解决以下问题。但每次我提交时,我都会收到Command terminated by signal (11: SIGSEGV).当我搜索时,当我们尝试访问不存在的内存段时,会发生此错误,那么我可以做些什么来改进我的代码,以及错误实际发生在哪里。我尝试查找并提出了这样一个事实,即我们可以安全地拥有一个大小536870912的 python 列表,所以我猜测 10^6 比这小得多也是安全的。

n = int(raw_input())
x = map(int, raw_input().split())
total, i, stolen, visited = sum(x), 0, 0, set()
while i in range(n) and x[i]:
visited.add(i)
stolen += 1
x[i] -= 1
if (x[i] + 1) % 2 == 1:
i += 1
else:
i -= 1
print(str(len(visited)) + ' ' + str(total - stolen))

蟒蛇列表的最大大小

这是我的程序运行示例

输入

8
1 3 5 7 11 13 17 19

预期输出

8 68

输出

8 68

输入

8
1 3 5 7 11 13 16 19

预期输出

7 63

输出

7 63

我不懂 Python,所以我忍不住找到这个错误,但我认为你的算法有问题。

问题说:

如果没有他想去的星星,他就会停止跋涉。

但是,如果农场上没有绵羊,您的算法似乎也会停止。

无论如何,问题在您插入时的形式中看起来很简单,所以我认为第一个参数的范围不是

(1 ≤ N ≤ 106(

而是

(1 ≤ N ≤ 106(

在这种情况下,列表的大小可能是一个问题...特别是如果它们限制了代码的可用内存。

但实际上你不需要存储所有的输入参数!您可以非常轻松地计算被盗的羊:

  1. 您从第一个服务器场开始。

2.1.如果这里有偶数只羊,那么以下农场都不会被访问,1只羊将从这里被盗。

2.2. 如果这里有奇数只羊,那么现在将偷走 1 只羊,当疯星回来时还会偷走 1 只(那时这里和之前的所有农场都会有偶数只羊,所以疯狂的开始不会再去它了。我们还必须处理农场只有一只羊的情况,因为在这种情况下,这里只能偷 1 只羊。

  1. 处理下一个服务器场

最后,你必须处理另一个特殊情况:如果每个农场里有偶数只羊,那么每个农场正好偷了1只羊,因为在这种情况下,疯狂的明星永远不会回头。(每个农场至少有一只羊(

这是一个作为伪代码的简单算法:

int N= read();
boolean visit = true;
int visited = 0;
int total = 0;
int stolen = 0;
while(--N >0 ) {
int x = read();
total+=x;
if(visit) {
visited++;
if(x%2 == 1) {
stolen+=min(x,2);
} else {
stolen+=1;
visit = false;
}
}
}
if(visit) {
print(N + ' ' = (total-N));
} else {
print(visited + ' ' + (total-stolen));
}

最新更新