USACO 2015 December (Bronze)
09 Mar 2020 | Python USACO PSUSACO 2015 December
1. Fence Painting
입력 크기가 작아서 그냥 집합으로 만들어서 합집합으로 처리했다.
with open("paint.in", "r") as f:
a, b = map(int, f.readline().strip().split())
c, d = map(int, f.readline().strip().split())
ans = len(set(range(a, b)) | set(range(c, d)))
with open("paint.out", "w") as f:
f.write(str(ans)+"\n")
2. Speeding Ticket
마찬가지로 입력크기가 작아서 그냥 리스트에 속도를 넣은 후 전부 탐색했다.
r = []
b = []
with open("speeding.in", "r") as f:
n, m = map(int, f.readline().strip().split())
for _ in range(n):
length, lim = map(int, f.readline().strip().split()) # length, limit
r += [lim]*length
for _ in range(m):
length, lim = map(int, f.readline().strip().split()) # length, speed
b += [lim]*length
ans = 0
for i in range(100):
if r[i] < b[i]:
ans = max(b[i]-r[i], ans)
with open("speeding.out", "w") as f:
f.write(str(ans)+"\n")
3. Contaminated Milk
각각의 사람이 먹은 우유의 종류별 최소 시간을 저장한 배열을 만든 후, 해당 배열에서 아픈 사람이 아프기 시작한 시점 전에 먹은 우유의 종류를 골라낸 이후, 해당 우유를 몇명이 섭취했는지 최대값을 구하면 된다.
sick = []
with open("badmilk.in", "r") as f:
n, m, d, s = map(int, f.readline().strip().split())
b = [[200]*m for _ in range(n)]
for _ in range(d):
p, milk, t = map(int, f.readline().strip().split())
b[p-1][milk-1] = min(b[p-1][milk-1], t)
for _ in range(s):
p, t = map(int, f.readline().strip().split()) # person, sick_time
sick.append([p-1, t])
ans = 0
res = [0]*m
for p, t in sick:
for i in range(m):
if b[p][i] < t:
res[i] += 1
for r in range(m):
if res[r] == s:
cnt = 0
for i in range(n):
if b[i][r] != 200:
cnt += 1
ans = max(ans, cnt)
with open("badmilk.out", "w") as f:
f.write(str(ans)+"\n")
Comments