목록우선순위 큐 (5)
레야몬
1. 문제 난이도 순서로 된 1~N번까지 총 N개의 문제로 되어 있는 문제를 풀려고 한다. 민오는 세 가지 조건에 따라 문제를 풀 순서를 정한다. N개의 문제를 모두 풀어야 한다. 먼저 푸는 것이 좋은 문제가 있는 문제는, 먼저 푸는 것이 좋은 문제를 반드시 먼저 풀어야 한다. 가능하면 쉬운 문제부터 푼다. 문제의 개수와 먼저 푸는 것이 좋은 문제에 대한 정보가 주어졌을 때, 주어진 조건에 맞는 민오가 풀 문제의 순서를 결정하시오. - 1 - 문제의 수 \(N(1 \leq N \leq 32,000)\), 먼저 푸는 것이 좋은 문제에 대한 정보의 개수 \(M(1 \leq M \leq 100,000)\) - M개의 줄 - 두 정수의 순서쌍 A, B. A번 문제가 B번 문제보다 먼저 푸는 것이 좋다. 항상 문..
1. 문제 백준이가 동생에게 숫자를 불러줄 때, 그때까지 불러준 수들 중 중간값을 동생이 말해야 한다. - 1 - 백준이가 외치는 정수의 개수 \(N(1 \leq N \leq 100,000)\) - N줄 - 정수 \(num(-10,000 \leq num \leq 10,000)\) 중간값 2. 재정의 수열들의 중간값 출력 3. 해결 방법 오름차순, 내림차순 우선순위 큐를 각각 하나씩 만든다. 오름차순 우선순위 큐의 top이 내림차순 우선순위 큐의 top보다 항상 작게 만들고 오름차순, 내림차순의 원소 수를 같게 한다면 항상 오름차순 우선순위 큐의 top이 중간값이다. 4. 실수한 점, 개선할 점 거의 다 생각했는데 끝을 생각해내지 못한 게 너무 아쉽다. 조금 체계적으로 사고하는 연습을 해야 할 필요가 있을..
#include #include #include #include #define MAX_BAG 300001 #define LOOP(i, n) for(int i=1; i> N >> K; LOOP(i, N) { int M, V; cin >> M >> V; jew.push_back({M, V}); } LOOP(i, K) cin >> b_wei[i]; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); input(); sort(b_wei+1, b_wei+K+1); //가방 오름차순 정렬 sort(jew.begin(), jew.end()); //보석의 무게로 오름차순 정렬 int id=0; LOOP(i, K) { int C ..
#include #include #include #include using namespace std; priority_queue max_pq; //최대 트리 int N, x; //연산의 개수, 정수 x int main() { ios_base::sync_with_stdio(false); //동기화 cin.tie(NULL); cout.tie(NULL); cin >> N; for(int i=0; i> x; if(!x) { if(max_pq.empty()) //큐가 비어있을 경우 0 출력 cout
결과적으론 나는 이 문제를 푸는 데 실패하였고 더 이상 C언어로 알고리즘 코드를 짜는 것은 힘들다고 생각하였다. 그래서 C언어에서 C++언어로 바꾸기로 하였고 코드는 다른 사람의 블로그에서 가져왔다. 그대로 가져왔고 내가 짠 코드는 절대 아니다. #include #include #include #include #include using namespace std; priority_queue min_pq; priority_queue max_pq; map dict; int T, k, n; char c; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> T; while (T) { while (!min_pq.em..