solved p2, p3
This commit is contained in:
parent
5b3351c2b8
commit
97343ec7e8
54
AGGRCOW.py
Normal file
54
AGGRCOW.py
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
def test_distance(cows: int, locations: list[int], distance: int) -> bool:
|
||||||
|
placed_cows = 1
|
||||||
|
last = locations[0]
|
||||||
|
for location in locations[1:]:
|
||||||
|
if location - last >= distance:
|
||||||
|
last = location
|
||||||
|
placed_cows += 1
|
||||||
|
|
||||||
|
if placed_cows >= cows:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
def main():
|
||||||
|
test_cases: int = int(input())
|
||||||
|
|
||||||
|
while test_cases != 0:
|
||||||
|
|
||||||
|
stalls, cows = [int(n) for n in input().split()]
|
||||||
|
|
||||||
|
locations = []
|
||||||
|
i = 0
|
||||||
|
while i < stalls:
|
||||||
|
|
||||||
|
locations.append(int(input()))
|
||||||
|
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
locations.sort()
|
||||||
|
|
||||||
|
l = locations[1] - locations[0]
|
||||||
|
r = max(locations) - min(locations)
|
||||||
|
m = (l + r) // 2
|
||||||
|
|
||||||
|
while True:
|
||||||
|
old_m = m
|
||||||
|
|
||||||
|
# Current split worked, so try more
|
||||||
|
if test_distance(cows, locations, m):
|
||||||
|
l = m + 1
|
||||||
|
else:
|
||||||
|
r = m - 1
|
||||||
|
|
||||||
|
m = (l + r) // 2
|
||||||
|
|
||||||
|
if m == old_m:
|
||||||
|
print(m)
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
test_cases -= 1
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
69
ARTHEVAL2.py
Normal file
69
ARTHEVAL2.py
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
# Returns result and index
|
||||||
|
def para(s: str, i: int) -> tuple[int, int]:
|
||||||
|
a, b = 0, 0
|
||||||
|
operator = '+'
|
||||||
|
c = s[i]
|
||||||
|
while c != ')':
|
||||||
|
c = s[i]
|
||||||
|
if c == '(':
|
||||||
|
i += 1
|
||||||
|
b, i = para(s, i)
|
||||||
|
match operator:
|
||||||
|
case '+':
|
||||||
|
a = a + b
|
||||||
|
case '-':
|
||||||
|
a = a - b
|
||||||
|
case '*':
|
||||||
|
a = a * b
|
||||||
|
elif c.isdigit():
|
||||||
|
b = int(c)
|
||||||
|
match operator:
|
||||||
|
case '+':
|
||||||
|
a = a + b
|
||||||
|
case '-':
|
||||||
|
a = a - b
|
||||||
|
case '*':
|
||||||
|
a = a * b
|
||||||
|
i += 1
|
||||||
|
else:
|
||||||
|
operator = c
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
return (a, i)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
s: str = input()
|
||||||
|
|
||||||
|
# Wish I could just use eval() but it uses pemdas
|
||||||
|
a, b = 0, 0
|
||||||
|
operator = '+'
|
||||||
|
i = 0
|
||||||
|
while i < len(s):
|
||||||
|
c = s[i]
|
||||||
|
if c == '(':
|
||||||
|
i += 1
|
||||||
|
b, i = para(s, i)
|
||||||
|
match operator:
|
||||||
|
case '+':
|
||||||
|
a = a + b
|
||||||
|
case '-':
|
||||||
|
a = a - b
|
||||||
|
case '*':
|
||||||
|
a = a * b
|
||||||
|
elif c.isdigit():
|
||||||
|
b = int(c)
|
||||||
|
match operator:
|
||||||
|
case '+':
|
||||||
|
a = a + b
|
||||||
|
case '-':
|
||||||
|
a = a - b
|
||||||
|
case '*':
|
||||||
|
a = a * b
|
||||||
|
i += 1
|
||||||
|
else:
|
||||||
|
operator = c
|
||||||
|
i += 1
|
||||||
|
print(a)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
Loading…
x
Reference in New Issue
Block a user