브라우니 vs. 캔디 vs. 쿠키
시간 제한1초메모리 제한1024 MB
각 연습마다 남은 브라우니가 그룹 인원보다 적거나 같으면 반으로 자르고, 그룹이 하나씩 가져간 뒤 남은 개수를 출력합니다.
문제
UCF 프로그래밍 팀 연습에는 누구나 참여할 수 있고, 많은 학생이 이 기회를 활용한다. 가장 큰 이점은 학생들이 문제 해결 능력과 프로그래밍 실력을 키울 수 있다는 것이다. 또 다른 이점은 Orooji 박사가 매주 가져오는 간식을 즐길 수 있다는 점이다! O 박사는 보통 캔디를 가져오지만, 때로는 쿠키나 브라우니를 가져오기도 한다. 브라우니는 인기가 아주 많아서 보통 금방 떨어진다. 그래서 O 박사는 학생들이 연습이 끝날 때까지 남아 있도록 브라우니를 오래 먹을 수 있는 묘안을 찾아야 한다. 가장 간단한 방법은 브라우니를 반으로 자르는 것이다. 그러면 브라우니 개수가 두 배가 된다.
원래 브라우니 개수와 브라우니를 원하는 각 학생 그룹의 인원이 주어질 때, O 박사가 브라우니를 반으로 자를 때마다 남은 브라우니 개수를 기록하라.
학생 그룹이 간식 테이블에 다가왔을 때 O 박사가 남은 브라우니 개수가 그룹의 학생 수 이하임을 확인하면, O 박사는 그룹의 학생들이 한 개씩 가져간 뒤에도 브라우니가 남도록 브라우니를 반으로 자른다. 필요하면 여러 번 자른다. 예를 들어 브라우니가 3개 남아 있고 24명의 학생이 테이블에 다가오면, O 박사는 네 번 잘라야 한다(3 → 6 → 12 → 24 → 48). 그래야 학생들이 한 개씩 가져가도 브라우니가 모두 떨어지지 않는다.
입력
첫 줄에는 연습의 횟수를 나타내는 양의 정수 n이 주어진다. 각 연습은 두 정수 s와 b를 공백으로 구분해 적은 한 줄로 시작한다. s는 연습에 참여하는 학생 수(1 이상 30 이하)이고, b는 O 박사가 그날 가져온 브라우니 개수(60 이상 600 이하)이다.
다음 줄에는 간식 테이블에 오는 학생 그룹의 수를 나타내는 양의 정수 m이 주어진다. 이어서 각 그룹의 학생 수가 한 줄에 하나씩 주어진다. 입력값은 모두 유효하다. 각 그룹에는 최소 1명이 있고, 그룹의 인원은 연습 참여 학생 수를 넘지 않는다.
출력
각 연습의 시작에는 'Practice #p: s b' 형식으로 출력한다. p는 1부터 시작하는 연습 번호이고, s는 학생 수, b는 브라우니 개수이다.
그다음 그룹마다 한 줄씩 출력한다. 각 줄에는 그룹의 학생 수와, 그룹의 학생들이 한 개씩 가져간 뒤 남은 브라우니 개수를 쓴다. 자르는 일은 가져가기 전에 일어날 수 있다. 각 연습의 출력 뒤에는 빈 줄을 하나 남긴다.