물통
시간 제한2초메모리 제한128 MB
목표 수량 쌍 목록이 주어지면 각 쌍이 바로 앞 쌍에서 도달 가능한 가장 긴 사슬을 찾습니다.
문제
물통 A와 B는 가득 채우면 각각 리터, 리터가 들어간다. 두 물통에는 눈금이 없어서, 비었거나 가득 찬 상태가 아니면 안에 물이 얼마나 있는지 알 수 없다. 처음에 A에는 리터, B에는 리터가 들어 있다. 옆에는 물이 무한히 있는 저수지가 있다.
눈금이 없으므로, 두 물통에 든 물의 양을 정확히 알면서 할 수 있는 작업은 다음 여섯 가지뿐이다.
- A 또는 B의 물을 저수지에 버린다.
- 저수지의 물로 A 또는 B를 가득 채운다.
- A가 빌 때까지 A의 물을 B로 옮긴다.
- B가 가득 찰 때까지 A의 물을 B로 옮긴다.
- B가 빌 때까지 B의 물을 A로 옮긴다.
- A가 가득 찰 때까지 B의 물을 A로 옮긴다.
정수 쌍 를 목표량이라고 한다. A와 B가 각각 리터, 리터를 담은 상태에서 위 작업을 0번 이상 적용해 A와 B가 정확히 리터, 리터를 담게 만들 수 있으면, 목표량 는 에서 도달 가능하다고 한다.
목표량 이 주어진다. 인 부분수열 중에서 각 목표량이 바로 앞 목표량에서 도달 가능한 가장 긴 것을 찾아라. 연속할 필요는 없어서, 이 충분히 크면 도 부분수열이 된다. 의 앞 목표량은 처음 상태 로 본다. 처음 상태에서 첫 번째 목표량을 만들고, 첫 번째 목표량에서 두 번째 목표량을 만드는 식으로 이어지는 가장 긴 부분수열의 길이 을 구하는 문제이다.
입력
첫 줄에 테스트 케이스의 수 가 주어진다. 각 테스트 케이스의 첫 줄에는 다섯 정수 , , , , 이 주어진다 (, , , ). 와 는 A와 B의 용량, 와 는 처음에 A와 B에 든 물의 양, 은 목표량의 개수이다. 이어지는 개 줄에는 목표량이 두 정수 와 로 주어진다 (, ). 는 A가 담아야 할 물의 양, 는 B가 담아야 할 물의 양이다.
출력
각 테스트 케이스마다 한 줄씩, 위에서 정의한 가장 긴 부분수열의 길이를 출력한다. 에서 도달할 수 있는 목표량이 하나도 없으면 0을 출력한다.