#include #include #include typedef struct student { char *name; int vote_count; } student_t; int compare_students(const void *a, const void *b) { const student_t *student_a = (const student_t *)a; const student_t *student_b = (const student_t *)b; if (student_a->vote_count > student_b->vote_count) { return -1; } else if (student_a->vote_count < student_b->vote_count) { return 1; } return strcmp(student_a->name, student_b->name); } int main() { student_t *students = NULL; int students_capacity = 0; int student_count = 0; char line[1024]; int total_votes = 0; while (fgets(line, sizeof(line), stdin)) { int vote_count; char name[1024]; sscanf(line, "%d %[^\n]", &vote_count, name); if (student_count == 0) { total_votes = vote_count; } else { int existing_student_index = -1; for (int i = 0; i < student_count; i++) { if (strcmp(students[i].name, name) == 0) { existing_student_index = i; break; } } if (existing_student_index != -1) { students[existing_student_index].vote_count += vote_count; } else { if (student_count >= students_capacity) { students_capacity = (students_capacity + 1) * 2; student_t *new_students = realloc(students, students_capacity * sizeof(student_t)); if (new_students == NULL) { fprintf(stderr, "Error: Memory reallocation failed\n"); return 1; } students = new_students; } students[student_count].name = strdup(name); students[student_count].vote_count = vote_count; student_count++; } } } if (student_count == 0) { printf("Žiadni študenti.\n"); } else if (student_count == 1) { printf("Vysledky:\n"); printf("%d %s\n", total_votes, students[0].name); } else { qsort(students, student_count, sizeof(student_t), compare_students); printf("Vysledky:\n"); for (int i = 0; i < student_count; i++) { printf("%d %s\n", students[i].vote_count, students[i].name); } } for (int i = 0; i < student_count; i++) { free(students[i].name); } free(students); return 0; }