문제
모든 하위 직원은 부서장으로 동일한 승진을 합니다. 조직도 트리의 높이는 H입니다. 아래는 높이가 1과 3인 조직도입니다.

작업은 R일 동안 실행됩니다. 처음에는 최하위 직원에게만 K개의 주문된 작업이 있습니다. 각 작업에는 작업 번호가 있습니다. 매일 남은 일이 있으면 부하가 일을 완성해 상사에게 제시한다. 보류 중인 작업에서 다른 직원은 업로드된 순서대로 작업을 수행하고 상사에게 업로드합니다. 단, 홀수일에는 왼쪽 하위가 게시한 작업이 처리되고, 짝수일에는 오른쪽 하위가 게시한 작업이 처리됩니다.
부서장 업무가 완료되었습니다. 모든 작업은 동시에 이루어집니다. 따라서 상사는 그날 올린 작업을 다음날까지 처리할 수 있다.
주어진 부서의 조직과 대기열에 있는 작업이 완료된 작업 수의 합계를 계산하는 프로그램을 작성하십시오.
1 ≤ 높이 ≤ 10
1 ≤ K ≤ 10
1 ≤ R ≤ 1,000
문제를 해결하다
이진 트리를 순회하여 지시대로 진행할 수 있는 문제입니다.
팀원들은 각 이진 트리의 위치에 배치되며, 인덱스가 홀수이면 오른쪽 부하가 할당한 작업이 증가하고, 짝수이면 에 부하가 할당한 작업이 저장됩니다. 왼쪽.
O 인덱스: 1
OO index : 2(짝수, 좌), index : 3(홀수, 우)
날짜가 홀수일 경우 왼쪽 부하가 인계합니다.
날짜가 짝수이면 오른쪽에 있는 부하가 인계합니다.
편집한 작업을 상사의 왼쪽 하위 작업 또는 오른쪽 부하 직원의 게시된 작업에 저장합니다.
지수가 1이 되면 부서장에게 일이 넘어가 처리되기 때문에 결과가 합산된다.
from collections import deque
class Employee:
def __init__(self, height):
if height == H:
self.jobs = deque()
else:
self.leftJobs = deque()
self.rightJobs = deque()
def team_set(index, height):
if H < height:
return
team(index) = Employee(height)
team_set(index * 2, height + 1)
team_set(index * 2 + 1, height + 1)
def work(day, index, height):
global result
if height > H:
return
Employee = team(index)
if height == H and Employee.jobs:
job = Employee.jobs.popleft()
if index % 2 == 0:
team(index // 2).leftJobs.append(job)
else:
team(index // 2).rightJobs.append(job)
elif height < H and day % 2 == 0 and Employee.rightJobs:
job = Employee.rightJobs.popleft()
if index == 1:
result += job
else:
if index % 2 == 0:
team(index // 2).leftJobs.append(job)
else:
team(index // 2).rightJobs.append(job)
elif height < H and day % 2 == 1 and Employee.leftJobs:
job = Employee.leftJobs.popleft()
if index == 1:
result += job
else:
if index % 2 == 0:
team(index // 2).leftJobs.append(job)
else:
team(index // 2).rightJobs.append(job)
work(day, index * 2, height + 1)
work(day, index * 2 + 1, height + 1)
H, K, R = map(int, input().split())
team = (0) * (2 ** (H + 1))
result = 0
team_set(1, 0)
for i in range(2 ** H, 2 ** (H+1)):
work_list = list(map(int, input().split()))
team(i).jobs.extend(work_list)
# 일해라 R일 동안
for i in range(1, R+1):
work(i, 1, 0)
print(result)
![[턱관절 치료 일기] 턱관절구강내과치과 초진 [턱관절 치료 일기] 턱관절구강내과치과 초진](https://mblogthumb-phinf.pstatic.net/MjAxOTA0MDJfMTI2/MDAxNTU0MTgwNzA0ODg3.R7xfM8_OlbREldeWqi8oM0HGVmIHxI0z7DzdX3n7TXkg.dR1zNg9dRm05y8XAkcJKaUHhnHQsmUdgIeOxHjOX63gg.JPEG.ysompain1/180917_%EC%97%B0%EC%84%B8%EA%B5%AC%EA%B0%95%EB%82%B4%EA%B3%BC%EC%B9%98%EA%B3%BC_%EB%B9%84%EC%A3%BC%EC%96%BC%EB%B0%B0%EB%84%8803.jpg?type=w800)
