원정
시간 제한 : 1000MS | 메모리 제한 : 65536k 나 | |
총 제출 : 30702 | 허용 : 8457 |
기술
암소의 그룹은 트럭을 잡고 정글로 탐험의 깊이에 모험. 오히려 가난한 드라이버이기 때문에, 소는 불행하게도 바위를 통해 실행하고 트럭의 연료 탱크에 구멍을 할 수 있었다. 트럭은 이제 연료의 하나 개의 유닛은 이동 거리의 모든 단위 누수.
트럭을 복구하려면, 소는 긴, 굴곡 도로 아래로 가장 가까운 도시 (더 이상 1,000,000 대 이상 먼) 운전해야합니다. 이도에 도시 및 트럭의 현재 위치 사이의 소 추가 연료 (각 정류장에서 1..100 단위) 취득을 중지 할 수있는 N (1 <= N <= 10000) 연료 정지있다.
정글은 인간의 위험한 소에 특히 위험하다. 따라서, 소 마을로가는 길에 연료 정지의 가능한 최소 수를 만들고 싶어. 다행히, 자신의 트럭에 연료 탱크의 용량은 효과적으로 저장할 수있는 연료의 양에 제한이 없음을 너무 큽니다. 트럭은 떨어진 거리에서 L 단위이고, P 연료의 단위를 갖는다 (1 <= P <= 100).
소가 전혀 마을에 도달 할 수없는 경우 마을에 도달하거나 필요한 정지의 최소 번호를 확인합니다.
트럭을 복구하려면, 소는 긴, 굴곡 도로 아래로 가장 가까운 도시 (더 이상 1,000,000 대 이상 먼) 운전해야합니다. 이도에 도시 및 트럭의 현재 위치 사이의 소 추가 연료 (각 정류장에서 1..100 단위) 취득을 중지 할 수있는 N (1 <= N <= 10000) 연료 정지있다.
정글은 인간의 위험한 소에 특히 위험하다. 따라서, 소 마을로가는 길에 연료 정지의 가능한 최소 수를 만들고 싶어. 다행히, 자신의 트럭에 연료 탱크의 용량은 효과적으로 저장할 수있는 연료의 양에 제한이 없음을 너무 큽니다. 트럭은 떨어진 거리에서 L 단위이고, P 연료의 단위를 갖는다 (1 <= P <= 100).
소가 전혀 마을에 도달 할 수없는 경우 마을에 도달하거나 필요한 정지의 최소 번호를 확인합니다.
입력
* 라인 1 : 하나의 정수이고, N
* 라인 2..N + 1 : 각 라인은 연료 정지를 설명하는 두 개의 공간 분리 된 정수를 포함 제 정수가 정지 도시의 거리이고; 두 번째는 그 정지시 연료의 사용 가능한 양이다.
* 라인 N + 2 개의 공간으로 분리 정수, L 및 P
* 라인 2..N + 1 : 각 라인은 연료 정지를 설명하는 두 개의 공간 분리 된 정수를 포함 제 정수가 정지 도시의 거리이고; 두 번째는 그 정지시 연료의 사용 가능한 양이다.
* 라인 N + 2 개의 공간으로 분리 정수, L 및 P
산출
* 라인 1 : 연료의 최소 수를 나타내는 하나의 정수 마을에 도달하기 위해 필요한 중지합니다. 이 마을에 도달 할 수없는 경우, 출력 -1.
샘플 입력
4 4 4 5 2 11 5 15 10 25 10
샘플 출력
이
힌트
INPUT 자세한 사항 :
트럭은 25 개 단위 떨어진 마을에서이다; 트럭은 연료의 10 개 단위를 가지고있다. 길을 따라, 연료 (4) 거리 (4, 5), (11)이 정지하고, 도시 15 (이러한 초기 거리 21, 20, 14로되어 있으므로, 트럭 및 10)이있다. 이 연료 정지 각각 연료의 최대 4, 2, 5, 10 유닛을 제공 할 수 있습니다.
출력 세부 사항 :
드라이브 10 단위 취득 (10)의 연료 이상의 유닛을 정지, 4 개 단위 취득 연료의 5 개 단위 정지 드라이브, 다음 마을에 드라이브.
트럭은 25 개 단위 떨어진 마을에서이다; 트럭은 연료의 10 개 단위를 가지고있다. 길을 따라, 연료 (4) 거리 (4, 5), (11)이 정지하고, 도시 15 (이러한 초기 거리 21, 20, 14로되어 있으므로, 트럭 및 10)이있다. 이 연료 정지 각각 연료의 최대 4, 2, 5, 10 유닛을 제공 할 수 있습니다.
출력 세부 사항 :
드라이브 10 단위 취득 (10)의 연료 이상의 유닛을 정지, 4 개 단위 취득 연료의 5 개 단위 정지 드라이브, 다음 마을에 드라이브.
출처
1 #INCLUDE <cstdio> 2 #INCLUDE <iostream> 3 #INCLUDE <큐> 4 #INCLUDE <알고리즘> 5 6 이용한 스페이스 성병; 7 8 CONST INT max_n 1E4 + = 2 ; 9 CONST INT max_L = 1E6; 10 CONST INT max_P = 1E6; 11 CONST INT max_A = max_L; 12 CONST의 INT max_B = 100 ; 13 (14) INT N, L, P; (15) INT A [max_n], B [max_n] 16 . 17 typedef에 구조체 노드 (18)는 { . 19 INT에서 , A, B (20)이다 }; (21)는 노드 노드 [max_n] (22)이 23 인 24 BOOL CMP (노드 A, 노드 B)가 25 { 26은 리턴 AA < BA, 27 } 28 29 공극 (해결) 30 { 31 인 // 편의상 단말 국으로 알 수있는 32 개의 노드 [N-] II.A = L; 33은 노드 [N-] .B = 0 ; 34이다 ++N-] 35 36 // 배열 간격으로 정렬 37 @ 미친 WA I 정렬하지 않아도, 백서 날 해칠 38 인 정렬 (노드, 노드 + N-, CMP), 39 (40) // (INT I = 0; I <N-; I ++) 41 인 // { 42된다 // COUT << 노드 [I]를 II.A << '<< 노드 [I]를 .B << ENDL; 43이다 // } 44 인 45 INT ANS = 0 ; (46)이된다 (47) // 오일 최대 우선 순위 큐가 저장 위치에 도달 할 수있는 규정 48 priority_queue < INT > 힙; 49 (50) 에 대한 ( INT I =0 ; I <N-; ++ I) (51)가 { 52 인 // 루프 밖으로 단부 현재까지, 53되는 IF (P> = L) (54)는 { 55 BREAK ; 56이다 } (57)이다 // 현재 도달 지점 58 그동안 <(P 노드 [I] II.A) 59 { 60 //이 급유 또는까지 비워 61은 IF (heap.empty ()) (62)가 { 63 인 박았 ( " -1 " ) 64 리턴 ; 65 } 66 ++ ANS, 67 P = + heap.top (); 68 heap.pop (); 69 } 70 71이다 // 현재 지점이 지점까지의 스택에 추가 된 72 heap.push (노드 [I] .B)를, 73은 } 74 75 의 printf ( " % D \ N- " , ANS); 76 } 77 78 INT 주 () 79 { 80 는 scanf ( " %의 D " , 및 N-) 81 INT DIS 연료, 82 대 ( INT난 = 0 ; I <N; ++ I) 83 { 84 는 scanf ( " % D % D " , DIS, 연료); 85 노드 [I] = .A DIS; 86 노드 [I] = .B 연료; (87) } (88) (89) 는 scanf ( " % D % D ' , L, P); 90 91 대 ( INT 난 = 0 ; i가 <N; ++ I) 92 { 93 노드 [I] = .A L- 노드 [I] .A; 94 } 95 ) (해결; 96 반환 0 ; 97 }