Problem p02616 (python)

Fixed submission:
N, K = map(int, input().split())
mod = 10**9 + 7
nums = []
p_cnt = 0
for i in list(map(int, input().split())):
    if i >= 0:
        nums.append((i, True))
        p_cnt += 1
    else:
        nums.append((-i, False))
nums.sort()
if p_cnt == 0 and K%2!=0:
    ans = 1
    for k in range(K):
        ans *= -nums[k][0]
        ans %= mod
    print(ans)
    import sys
    sys.exit()
pl = []
ml = []
for k in range(K):
    x, b = nums.pop()
    if x == 0:
        print(0)
        import sys
        sys.exit()
    if b:
        pl.append(x)
    else:
        ml.append(x)
if len(ml) % 2 != 0:
    p = float("inf")
    px = float("inf")
    m = float("inf")
    mx = float("inf")
    while nums:
        x, b = nums.pop()
        if b:
            if ml and p == float("inf"):
                p = ml[-1]
                px = x
        else:
            if pl and m == float("inf"):
                m = pl[-1]
                mx = x
        if m != float("inf") and p != float("inf"):
            if px * m > mx * p:
                ml.pop()
                pl.append(px)
            else:
                pl.pop()
                ml.append(mx)
            break
    else:
        if p != float("inf"):
            ml.pop()
            pl.append(px)
        elif m != float("inf"):
            pl.pop()
            ml.append(mx)
ans = 1
for x in pl:
    ans *= x
    ans %= mod
for x in ml:
    ans *= -x
    ans %= mod
print(ans)

Buggy submission (verdict: Runtime Error):
N, K = map(int, input().split())
mod = 10**9 + 7
nums = []
p_cnt = 0
m_cnt = 0
for i in list(map(int, input().split())):
    if i >= 0:
        nums.append((i, True))
        p_cnt += 1
    else:
        nums.append((-i, False))
nums.sort()
if p_cnt == 0 and K%2!=0:
    ans = 1
    for k in range(K):
        ans *= -nums[k][0]
        ans %= mod
    print(ans)
    import sys
    sys.exit()
pl = []
ml = []
for k in range(K):
    x, b = nums.pop()
    if x == 0:
        print(0)
        import sys
        sys.exit()
    if b:
        pl.append(x)
    else:
        ml.append(x)
if len(ml) % 2 != 0:
    p = -1
    px = -1
    m = -1
    mx = -1
    while nums:
        x, b = nums.pop()
        if b:
            if ml and p == -1:
                p = x/ml[-1]
                px = x
                continue
        else:
            if pl and m == -1:
                m = x/pl[-1]
                mx = x
                continue
        if ml != -1 and pl != -1:
            if p > m:
                ml.pop()
                pl.append(px)
            else:
                pl.pop()
                ml.append(mx)
            break
    else:
        if p != -1:
            ml.pop()
            pl.append(px)
        elif m != -1:
            pl.pop()
            ml.append(mx)
ans = 1
for x in pl:
    ans *= x
    ans %= mod
for x in ml:
    ans *= -x
    ans %= mod
print(ans)

Buggy submission (verdict: Runtime Error):
N, K = map(int, input().split())
mod = 10**9 + 7
nums = []
p_cnt = 0
m_cnt = 0
for i in list(map(int, input().split())):
    if i >= 0:
        nums.append((i, True))
        p_cnt += 1
    else:
        nums.append((-i, False))
nums.sort()
if p_cnt == 0 and K%2!=0:
    ans = 1
    for k in range(K):
        ans *= -nums[k][0]
        ans %= mod
    print(ans)
    import sys
    sys.exit()
pl = []
ml = []
for k in range(K):
    x, b = nums.pop()
    if x == 0:
        print(0)
        import sys
        sys.exit()
    if b:
        pl.append(x)
    else:
        ml.append(x)
if len(ml) % 2 != 0:
    while nums:
        x, b = nums.pop()
        p = -1
        px = -1
        m = -1
        mx = -1
        if b:
            if ml and p == -1:
                p = x/ml[-1]
                px = x
                continue
        else:
            if pl and m == -1:
                m = x/pl[-1]
                mx = x
                continue
        if ml != -1 and pl != -1:
            if p > m:
                ml.pop()
                pl.append(px)
            else:
                pl.pop()
                ml.append(mx)
            break
    else:
        if p != -1:
            ml.pop()
            pl.append(px)
        elif m != -1:
            pl.pop()
            ml.append(mx)
ans = 1
for x in pl:
    ans *= x
    ans %= mod
for x in ml:
    ans *= -x
    ans %= mod
print(ans)

Buggy submission (verdict: Runtime Error):
N, K = map(int, input().split())
mod = 10**9 + 7
nums = []
p_cnt = 0
m_cnt = 0
for i in list(map(int, input().split())):
    if i >= 0:
        nums.append((i, True))
        p_cnt += 1
    else:
        nums.append((-i, False))
nums.sort()
if p_cnt == 0 and K%2!=0:
    ans = 1
    for k in range(K):
        ans *= -nums[k][0]
        ans %= mod
    print(ans)
    import sys
    sys.exit()
pl = []
ml = []
for k in range(K):
    x, b = nums.pop()
    if b:
        pl.append(x)
    else:
        ml.append(x)
if len(ml) % 2 != 0:
    while nums:
        x, b = nums.pop()
        p = -1
        px = -1
        m = -1
        mx = -1
        if b:
            if ml and p == -1:
                p = ml[-1] / x
                px = x
                continue
        else:
            if pl and m == -1:
                m = pl[-1] / x
                mx = x
                continue
        if ml != -1 and pl != -1:
            if p > m:
                ml.pop()
                pl.append(px)
            else:
                pl.pop()
                ml.append(mx)
            break
    else:
        if p != -1:
            ml.pop()
            pl.append(px)
        elif m != -1:
            pl.pop()
            ml.append(mx)
ans = 1
for x in pl:
    ans *= x
    ans %= mod
for x in ml:
    ans *= -x
    ans %= mod
print(ans)

Buggy submission (verdict: Runtime Error):
N, K = map(int, input().split())
mod = 10**9 + 7
nums = []
for i in list(map(int, input().split())):
    if i >= 0:
        nums.append((i, True))
    else:
        nums.append((-i, False))
rev_nums = sorted(nums, reverse=True)
nums.sort()
print(rev_nums)
print(nums)
ans = 1
pl = []
ml = []
for k in range(K):
    x, b = nums.pop()
    ans *= x
    ans %= mod
    if b:
        pl.append(x)
    else:
        ml.append(x)
if len(ml) % 2 != 0:
    while nums:
        x, b = nums.pop()
        if b:
            ans //= ml[-1]
            ans %= mod
            ans *= x
            ans %= mod
            break
        else:
            ans //= pl[-1]
            ans %= mod
            ans *= x
            ans %= mod
            break
    else:
        ans = -1
        for k in range(K):
            x, b = rev_nums.pop()
            ans *= x
            ans %= mod
print(ans)