2461번: 대표 선수
입력의 첫 번째 줄에는 학급의 수를 나타내는 N과 각 학급의 학생의 수를 나타내는 M이 하나의 빈칸을 사이에 두고 주어진다. 단, 1<=N,M<=1,000이다. 두 번째 줄부터 N개의 줄에는 각 줄마다 한 학급
www.acmicpc.net
[ 한국정보올림피아드 2011년 시도본선 중등부 3번 대표선수]
★ 우선순위 큐를 이용해서 풀어야 합니다.
edukoi.tistory.com/68?category=841618
19. c++ stl 우선순위 큐
● 우선순위 큐(priorith_queue) 컨테이너는 우선순위 queue를 구혀한 템플릿 클래스입니다. priority_queue 컨테이너에 설정된 기본 컨테이너는 vector입니다. ● priority_queue는 내부적으로 STL의 힙 알고리
edukoi.tistory.com
[ 백준 2461번 대표선수 소스코드 ]
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
typedef pair<int, int> ci;
int main()
{
int n, m, i, j, a;
int max = -1, min;
int ans = 2100000000;
ci k;
vector <int> v[1001];
int cnt[1001]= {0,};
//첫번째 항목으로 오름차순 정렬
priority_queue<ci, vector<ci>, greater<ci> > q;
scanf("%d %d", &n, &m);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d", &a);
v[i].push_back(a);
}
sort(v[i].begin(), v[i].end());
}
for(i=0;i<n;i++)
{
cnt[i]=1;
q.push(make_pair(v[i][0], i));
if(max<v[i][0])
max = v[i][0];
}
while(!q.empty())
{
k = q.top();
q.pop();
min = k.first;
if(ans > max-min)
ans = max-min;
if( cnt[k.second] == m) break;
q.push(make_pair(v[k.second][cnt[k.second]], k.second));
if(max < v[k.second][cnt[k.second]])
{
max = v[k.second][cnt[k.second]];
}
cnt[k.second]++;
};
printf("%d", ans);
}
'백준 문제풀이' 카테고리의 다른 글
백준 1406번 - 에디터 소스 코드 (0) | 2021.05.02 |
---|---|
백준 2458번 - 키순서 소스 코드 (0) | 2021.05.02 |
백준 2456번 - 나는 학급회장이다 (0) | 2021.05.01 |
백준 2505 - 두 번 뒤집기 (0) | 2021.05.01 |
백준 2567번 - 색종이2 소스 코드 (0) | 2021.04.18 |