1953. Результаты олимпиады

 

n участников олимпиады получили уникальные номера от 1 до n. В результате решения задач на олимпиаде каждый участник получил некоторое количество баллов (целое число от 0 до 600). Известно, кто сколько баллов набрал.

Перечислите участников олимпиады в порядке невозрастания набранных ими баллов.

 

Вход. В первой строке содержится число n (0 ≤ n ≤ 101). Далее записаны n чисел – количество набранных участниками баллов (первое число – это баллы, набранные участником номер 1, второе – участником номер 2 и так далее).

 

Выход. Вывести n чисел – номера участников в порядке невозрастания набранных ими баллов (участники, набравшие одинаковое количество балов должны выводиться в порядке неубывания их номеров).

 

Пример входа

Пример выхода

5

100 312 0 312 500

5 2 4 1 3

 

 

РЕШЕНИЕ

сортировка

 

Анализ алгоритма

С каждым участником олимпиады свяжем структуру member, которая содержит его номер и количество набранных балов. Образуем массив структур. Отсортируем их в порядке убывания балов. Участники, набравшие одинаковое количество балов, сортируются в порядке возрастания их номеров.

 

Пример

 

Реализация алгоритма

Объявим структуру участника соревнования member.

 

struct member

{

  int id, score;

};

 

Объявим массив участников.

 

vector<member> v;

 

Функция cmp является компаратором, сортирующих участников соревнования согласно заданному условию:

·         Если количество балов одинаковое, то сортируем участников в порядке возрастания номеров;

·         Иначе сортируем в порядке убывания балов.

 

int cmp(member a, member b)

{

  if (a.score == b.score) return a.id < b.id;

  return a.score > b.score;

}

 

Основная часть программы. Читаем входные данные. Участников нумеруем с 1.

 

scanf("%d", &n);

v.resize(n);

for (i = 0; i < n; i++)

{

  scanf("%d", &v[i].score);

  v[i].id = i + 1;

}

 

Сортируем участников соревнования.

 

sort(v.begin(), v.end(), cmp);

 

Выводим номера участников в требуемом порядке.

 

for (i = 0; i < n; i++)

  printf("%d ", v[i].id);

printf("\n");