Входная спецификация:
Каждый входной файл содержит один тестовый пример. Для каждого случая первая строка содержит положительное число N (≤100) — количество тестовых локаций. Затем следуют N рейтинговых списков, каждый из которых начинается со строки, содержащей целое положительное число K (≤300), количество испытуемых, а затем K строк, содержащих регистрационный номер (13-значное число) и общий балл каждого испытуемого. Все числа в строке разделяются пробелом.
Спецификация вывода:
Для каждого тестового примера сначала выведите в одну строку общее число испытуемых. Затем распечатайте окончательный рейтинг в следующем формате:
Код: Выделить всё
registration_number final_rank location_number local_rank
Пример входных данных:
Код: Выделить всё
2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85
Код: Выделить всё
9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4
Код: Выделить всё
#include
#include
#include
#include
#include
#include
struct Student
{
char id[14];
int score;
int r;
int location = -1;
int rl;
};
bool cmp(Student a, Student b)
{
if (a.score != b.score)
return a.score > b.score;
else
return strcmp(a.id, b.id) < 0;
}
int main()
{
using namespace std;
int locations = 0;
int number = 0;
int n = 0;
char registration_number[14];
vector sumstudents;
freopen("input.txt", "r", stdin);
fscanf(stdin, "%d", &locations); //fscanf返回值需检查
for (int i = 1; i 13)
{
cerr rl = 1;
// int flag = 1;
// while (it != students.end())
// {
// flag++;
// auto pre = it;
// it = std::find_if(++it, students.end(), [&](const Student &s)
// { return s.location == i; });
// if (it->score == pre->score)
// it->rl = pre->rl;
// else
// it->rl = flag;
// }
}
std::sort(sumstudents.begin(), sumstudents.end(), cmp);
sumstudents[0].r = 1;
for (size_t i = 1; i < sumstudents.size(); i++)
{
if (sumstudents[i].score == sumstudents[i - 1].score)
sumstudents[i].r = sumstudents[i - 1].r;
else
sumstudents[i].r = i + 1;
}
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78368958/i-want-to-know-why-my-answer-is-wrong-and-the-other-code-is-correct[/url]
Мобильная версия