제 1회 한국항공대학교 프로그래밍 경진대회(KAUPC)의 D번 문제
졸업한 학교이기도 하고 친구가 출제한 문제이기도 해서 풀어보았다.
F번 승부 조작 문제도 이후에 풀어볼 예정
n개의 화분
초기 k의 수분
연속된 a개에 b만큼 수분
매일 모든 화분의 수분 1 감소
수분이 0이 되면 사망
화분은 n/a일에 한번씩 물은 받는다
모든 캣닢이 살아 있는 기간이 최대한 길어지도록 물을 줄 때
첫 캣닢이 죽는 날짜를 구해야한다.
(2 ≤ N ≤ 100, 1 ≤ K ≤ 100, 1 ≤ AxB < N, A는 N의 약수)
큐를 사용했고,
A가 N의 약수니까 똑 나누어 떨어질 것이고
그래서 그냥 A개를 하나로 봤다.
처음에 큐에 넣을 때 해당 화분이 처음으로 물을 받게 될 날짜를 계산해 수분이 줄어든 상태로 넣었다.
그리고 물을 받고 다시 큐로 들어갈 때에도 역시 다시 물을 받을 날짜를 예상해서 그만큼 수분을 뺐다.
from sys import stdin
from collections import deque
n, k, a, b = map(int, stdin.readline().split())
q = deque()
for i in range(n//a):
q.append(k - i)
day = 0
while True:
if q[0] == 0:
print(day)
break
q.append(q.popleft()+b-n//a)
day+=1