Untitled

                Never    
C
       
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int catamount, food;

    typedef struct _cat
    {
        char name[35];
        int occu;
        int age;
    } cat;

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

    int main(void)
    {
        cat cats[100100];
        while (scanf("%d %d", &catamount, &food) != EOF)
        {
            char temp[50];
            for (int i = 0; i < catamount; i++)
            {
                scanf("%s %s %d", cats[i].name, temp, &(cats[i].age));
                switch (temp[0])
                {
                case 'e':
                    cats[i].occu = 1;
                    break;
                case 'n':
                    cats[i].occu = 2;
                    break;
                case 'k':
                    cats[i].occu = 3;
                    break;
                case 'w':
                    cats[i].occu = 4;
                    break;
                case 'a':
                    cats[i].occu = 5;
                    break;
                case 'm':
                    cats[i].occu = 6;
                    break;
                case 'd':
                    cats[i].occu = 7;
                    break;
                case 'l':
                    cats[i].occu = 8;
                    break;
                }
            }
            qsort(cats, catamount, sizeof(cat), cmp);

            for (int j = 0; j < food && j < catamount; j++)
                printf("%s\n", cats[j].name);
        }
        return 0;
    }

    int cmp(const void *a, const void *b)
    {
        cat A = *(cat *)a;
        cat B = *(cat *)b;

        if (A.occu == B.occu)
        {
            if (A.age == B.age)
                return strcmp(A.name, B.name);
            else if (A.age < B.age)
                return A.occu == 5 ? -1 : 1;
            else if (A.age > B.age)
                return A.occu == 5 ? 1 : -1;
        }
        else if (A.occu < B.occu)
            return -1;
        else if (A.occu > B.occu)
            return 1;
    }

Raw Text