Submission details
Task:Apple Division
Sender:aalto25a_005
Submission time:2025-09-04 14:01:14 +0300
Language:Python3 (CPython3)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.02 sdetails
#2ACCEPTED0.02 sdetails
#3ACCEPTED0.02 sdetails
#4ACCEPTED0.02 sdetails
#5ACCEPTED0.02 sdetails
#6ACCEPTED0.02 sdetails
#7ACCEPTED0.92 sdetails
#8ACCEPTED0.94 sdetails
#9ACCEPTED0.99 sdetails
#10ACCEPTED0.96 sdetails
#11ACCEPTED0.98 sdetails
#12ACCEPTED0.97 sdetails
#13ACCEPTED0.02 sdetails
#14ACCEPTED0.02 sdetails
#15ACCEPTED0.02 sdetails
#16ACCEPTED0.02 sdetails
#17ACCEPTED0.97 sdetails
#180.40 sdetails

Code

import sys
from itertools import combinations, chain

dbg = 0


def powerset(iterable):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(len(s) + 1))


# strict int
def sint(x):
    if isinstance(x, str):
        return int(x)
    if x.is_integer():
        return int(x)
    raise ValueError


def ep(*args, **kwargs):
    if dbg:
        print(*args, file=sys.stderr, **kwargs)


def p(**kwargs):
    ep(", ".join([f"{k} = {v}" for (k, v) in kwargs.items()]))


n = sint(input())
p_n = [sint(h) for h in input().split(" ")]
p(n=n, p_n=p_n)

if n == 1:
    ep("only one apple, difference is it's weight")
    print(p_n[0])
elif n == 0:
    ep("no apples, difference is 0")
    print(0)
else:
    # in this case the powerset is ordered so that it's a complement palindrome, such that the first and last are
    # complement sets, and the second first and second last and so on. we should start from the middle
    # powerset is even size always
    # ps = list(powerset(p_n))
    # p(ps=ps)
    # max_diff = None
    # for i in range(0, sint(len(ps) / 2)):
    #     diff = abs(sum(ps[i]) - sum(ps[-i - 1]))
    #     p(considering=(ps[i], ps[-i - 1]), diff=diff)
    #     if not max_diff or diff < max_diff:
    #         max_diff = diff
    #     if diff == 0:
    #         break
    # print(max_diff)
    ps = powerset(p_n)
    # *min_diff
    max_diff = float("inf")
    i = 0
    total_sum = sum(p_n)
    for ss in ps:
        ss = set(ss)
        # css = set(x for x in p_n if x not in ss)
        # diff = abs(sum(ss) - sum(css))
        # p(ss=ss, css=css, diff=diff)
        # max_diff = min(diff, max_diff)
        sum1 = sum(ss)
        sum2 = total_sum - sum1
        max_diff = min(max_diff, abs(sum1 - sum2))
        # if not max_diff or diff < max_diff:
        #     max_diff = diff
        # if diff == 0:
        #     break
        i += 1
        # we have gone through half already
        if i >= (2**n) / 2:
            break
    print(max_diff)

Test details

Test 1

Verdict: ACCEPTED

input
10
603 324 573 493 659 521 654 70...

correct output
2

user output
2

Test 2

Verdict: ACCEPTED

input
10
952 775 292 702 859 719 65 943...

correct output
1

user output
1

Test 3

Verdict: ACCEPTED

input
10
141 156 14 487 250 230 741 602...

correct output
2

user output
2

Test 4

Verdict: ACCEPTED

input
10
963 359 731 826 599 931 40 86 ...

correct output
4

user output
4

Test 5

Verdict: ACCEPTED

input
10
238 224 861 461 558 860 318 93...

correct output
2

user output
2

Test 6

Verdict: ACCEPTED

input
10
193 848 70 53 864 886 374 31 2...

correct output
1

user output
1

Test 7

Verdict: ACCEPTED

input
20
13048212 423374770 19874608 81...

correct output
8231

user output
8231

Test 8

Verdict: ACCEPTED

input
20
314836307 815098885 922742346 ...

correct output
1188

user output
1188

Test 9

Verdict: ACCEPTED

input
20
846261131 196958704 824235264 ...

correct output
11770

user output
11770

Test 10

Verdict: ACCEPTED

input
20
92021619 792314463 937735495 8...

correct output
4453

user output
4453

Test 11

Verdict: ACCEPTED

input
20
452747515 202201476 845758891 ...

correct output
4881

user output
4881

Test 12

Verdict: ACCEPTED

input
20
934033764 747013925 113297529 ...

correct output
5482

user output
5482

Test 13

Verdict: ACCEPTED

input
1
1000000000

correct output
1000000000

user output
1000000000

Test 14

Verdict: ACCEPTED

input
2
1 1

correct output
0

user output
0

Test 15

Verdict: ACCEPTED

input
1
1

correct output
1

user output
1

Test 16

Verdict: ACCEPTED

input
5
934033764 2 7 4 1

correct output
934033750

user output
934033750

Test 17

Verdict: ACCEPTED

input
20
934033764 747013925 113297529 ...

correct output
5483

user output
5483

Test 18

Verdict:

input
19
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
1

user output
17