Решение задачи №1168 «Экзамены» с ACMP





Решение задачи №1168 «Экзамены» с ACMP

Условие задачи

Вступительные испытания в вуз состоят из трех экзаменов – математики, информатики и русского языка. На каждом из них абитуриент может набрать от одного до ста баллов. По результатам сдачи экзаменов составляется экзаменационная ведомость, где для каждого студента указывается фамилия и баллы за каждый экзамен. Для определения лучших абитуриентов, данная ведомость сортируется по сумме набранных баллов за все экзамены, а если сумма баллов совпадает – по фамилии (в алфавитном порядке, по убыванию). После чего первые M абитуриентов из списка зачисляются на первый курс и становятся студентами!

Ваша задача – по экзаменационной ведомости определить фамилию и сумму баллов последнего зачисленного абитуриента.

Входные данные
Первая строка входного файла INPUT.TXT содержит два натуральных числа: N – количество абитуриентов в ведомости и M – количество абитуриентов, которые будут зачислены на первый курс (M ≤ N ≤ 1000). Далее идет N строк, в каждой из которых указана фамилия студента и 3 натуральных числа – баллы за каждый экзамен. Фамилия студента – непустая строка из английских символов (не более 10), первая буква прописная, остальные – строчные.

Выходные данные
В выходной файл OUTPUT.TXT выведите фамилию и сумму баллов последнего поступившего абитуриента.

#include<iostream>
#include<string>
using namespace std;
struct ab{string f;int b;};
main()
{
int n,m,x,y,z,i,j,k;
cin>>n>>m;
ab a[n],c;
for(i=0;i<n;++i)
{
cin>>a[i].f>>x>>y>>z;
a[i].b=x+y+z;
if(i&&(a[i].b>a[i-1].b||a[i].b==a[i-1].b&&a[i].f>a[i-1].f))
{
c=a[i];j=i;
while(j&&(c.b>a[j-1].b||c.b==a[j-1].b&&c.f>a[j-1].f))
{
a[j]=a[j-1];
j--;
}
a[j]=c;
}
}
cout<<a[m-1].f<<' '<<a[m-1].b;

}



Условия задач взяты с сайта acmp.ru