아시아 정보올림피아드
문제
최근 아시아 지역의 학생들만 참여하는 정보 올림피아드 대회가 만들어졌다.
이 대회는 온라인으로 치러지기 때문에 각 나라에서 이 대회에 참여하는 학생 수의 제한은 없다.
참여한 학생들의 성적순서대로 세 명에게만 금, 은, 동메달을 수여한다.
단, 동점자는 없다고 가정한다.
그리고 나라별 메달 수는 최대 두 개이다.
예를 들어, 대회 결과가 다음의 표와 같이 주어졌다고 하자.
이 경우, 금메달 수상자는 1번 국가의 1번 학생이고,
은메달 수상자는 1번 국가의 2번 학생이며,
동메달 수상자는 3번 국가의 4번 학생이다.
(1번 국가의 3번 학생의 성적이 동메달 수여자보다 높지만,
나라 별 메달 수가 두 개 이하 이므로 1번 국가 3번 학생은 동메달을 받을 수 없다.)
대회 결과가 입력으로 주어질 때, 메달 수상자를 결정하여 출력하는 프로그램을 작성하시오.
입력형식
출력형식
입력 예
9
1 1 230
1 2 210
1 3 205
2 1 100
2 2 150
3 1 175
3 2 190
3 3 180
3 4 195
출력 예
1 1
1 2
3 4
소스코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int data[107][3];
int res[3][2], rc;
int cmp(const void* a, const void* b)
{
return *(int*)a - *(int*)b;
}
int main()
{
int i, j, n, cnt;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
scanf("%d %d %d", &data[i][1], &data[i][2], &data[i][0]);
}
qsort(data+1, n, sizeof(data[0]), cmp);
for (i = n; i >= 1 && rc < 3; i--)
{
cnt = 0;
for (j = 0; j < rc; j++)
{
if (data[i][1] == res[j][0])
cnt++;
}
if (cnt < 2)
{
res[rc][0] = data[i][1];
res[rc++][1] = data[i][2];
}
}
for (i = 0; i < 3; i++)
printf("%d %d\n", res[i][0], res[i][1]);
return 0;
}
'정보올림피아드&알고리즘' 카테고리의 다른 글
1291 : 구구단 (0) | 2022.03.18 |
---|---|
버스 갈아타기 (0) | 2022.03.17 |
카드 배열 (0) | 2022.03.15 |
사회망 서비스 (0) | 2022.03.15 |
먹이사슬 (0) | 2022.03.14 |