Log for everything - Day

USACO 2015 December (Bronze)

|

USACO 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