---
# System prepended metadata

title: 12847 - Small Cat Society
tags: [qsort]

---

# 12847 - Small Cat Society
>author: Utin
###### tags: `qsort`

---

## Brief
See the code below

## Solution 0

```c=
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct _cat {
    char name[31];
    int occu;
    int age;
} Cat;

int n, m;
Cat arr[10001];

int cmp(const void* a, const void* b);

int main() {
    while (scanf("%d %d", &n, &m) == 2) {
        for (int i = 0; i < n; i++) {
            char occu[11];
            scanf("%s %s %d", arr[i].name, occu, &arr[i].age);
            if (occu[0] == 'e') arr[i].occu = 0;
            else if (occu[0] == 'k') arr[i].occu = 1;
            else if (occu[0] == 'a') arr[i].occu = 2;
        }
        qsort(arr, n, sizeof(Cat), cmp);
        for (int i = 0; i < n && i < m; i++) {
            printf("%s\n", arr[i].name);
        }
    }
}

int cmp(const void* a, const void* b) {
    Cat A = *(Cat*) a;
    Cat B = *(Cat*) b;
    if (A.occu != B.occu) return A.occu - B.occu;
    if (A.age != B.age && A.occu == 2) return A.age - B.age;
    if (A.age != B.age) return B.age - A.age;
    return strcmp(A.name, B.name);
}
// By Utin
```

## Reference