-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpicky_card.py
More file actions
87 lines (68 loc) · 1.99 KB
/
Copy pathpicky_card.py
File metadata and controls
87 lines (68 loc) · 1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import random
def _get_median(a: tuple):
return findMedian(list(a))
def partition(arr, l, r):
lst = arr[r]
i = l
j = l
while j < r:
if arr[j] < lst:
arr[i], arr[j] = arr[j], arr[i]
i += 1
j += 1
arr[i], arr[r] = arr[r], arr[i]
return i
def _random_partition(arr, l, r):
n = r - l + 1
pivot = random.randint(0, n - 1)
i = l + pivot
arr[i], arr[r] = arr[r], arr[i]
return partition(arr, l, r)
def _median_utils(arr, l, r, k, a, b):
if l <= r:
partitionIndex = _random_partition(arr, l, r)
# find the median of odd number element in arr[]
if partitionIndex == k:
b[0] = arr[partitionIndex]
if a[0] != -1:
return
elif partitionIndex == k - 1: # a & b as middle element of arr[]
a[0] = arr[partitionIndex]
if b[0] != -1:
return
# index in first half of the arr[]
if partitionIndex >= k:
_median_utils(arr, l, partitionIndex - 1, k, a, b)
# find the index in second half of the arr[]
else:
_median_utils(arr, partitionIndex + 1, r, k, a, b)
def findMedian(arr):
a = [-1]
b = [-1]
n = len(arr)
_median_utils(arr, 0, n - 1, n // 2, a, b)
return b[0]
def _iterate(n):
x = 2 ** (n)
for s in range(x):
s = str(bin(s))[2:]
s = s.zfill(n)
yield s
def _eval_median(a: tuple, x: int, i=0, j=None):
m = _get_median(a)
if abs(m) == abs(x):
return "YES"
for i in _iterate(len(a)):
a0 = tuple([a[j] if i[j] == "0" else -a[j] for j in range(len(a))])
m = _get_median(a0)
if abs(m) == abs(x):
return "YES"
return "NO"
def _eval(a, x=None):
x = a[0]
return _eval_median(a, x)
t = int(input().rstrip())
for t_itr in range(t):
(n) = tuple([int(x) for x in input().rstrip().split()])
a = list([int(x) for x in input().rstrip().split()])
print(_eval(a))