Microwaving Lunch Boxes(LUNCHBOX) 정답 코드
뿌리튼튼 CS/Algorithm2015. 2. 12. 10:38
난이도 ★☆☆☆☆
힌트
오래 먹는 사람을 먼저 먹인다. 만약 먹는 시간이 같은 사람이 있다면 데우는 시간이 짧은 사람을 먼저 먹인다. → E를 내림차순으로 정렬, 동점자에 한해서 M을 오름차순으로 정렬 |
이하는 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include <stdio.h> #include <queue> #define MAX_N 10000 #define MAX(a ,b) (((a) > (b)) ? (a) : (b)) #pragma warning(disable:4996) using namespace std; typedef struct { int M; int E; } LunchBox; LunchBox lunchBoxes[MAX_N]; struct MaxCompare { bool operator() (const int index1, const int index2) { const LunchBox left = lunchBoxes[index1]; const LunchBox right = lunchBoxes[index2]; if (left.E == right.E) { return left.M > right.M; } return left.E < right.E; } }; int main() { int T; scanf("%d\n", &T); while (T-- > 0) { int N; scanf("%d", &N); // get M int totalMTime = 0; for (int i = 0; i < N; i++) { scanf("%d", &lunchBoxes[i].M); totalMTime += lunchBoxes[i].M; } // get E and make heap priority_queue<int, vector<int>, MaxCompare> maxHeap; for (int i = 0; i < N; i++) { scanf("%d", &lunchBoxes[i].E); int *heapNode = new int; *heapNode = i; maxHeap.push(*heapNode); } // int time = 0; int tmpMTime = 0; int heapSize = maxHeap.size(); for (int i = 0; i < heapSize; i++) { LunchBox top = lunchBoxes[maxHeap.top()]; tmpMTime += top.M; time = MAX(time, top.E + tmpMTime); maxHeap.pop(); } printf("%d\n", time); } return 0; } | cs |
'뿌리튼튼 CS > Algorithm' 카테고리의 다른 글
Coin Change(COINS) 정답 코드 (0) | 2015.02.23 |
---|---|
최소, 최대 정사각형 찾기 1(MMRECT1) 정답 코드 (0) | 2015.02.16 |
회전초밥(SUSHI) 정답 코드 (0) | 2015.02.10 |
소풍(PICNIC) 정답 코드 (0) | 2015.02.09 |
0-1수열(ZEROONE) 정답 코드 (0) | 2015.02.09 |