Untitled

 avatar
unknown
c_cpp
3 years ago
1.8 kB
5
Indexable
//11490 - The Cat Society
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char order[8][20] = {"elder", "nursy", "kitty", "warrior"
                    ,"apprentice", "medicent", "deputy", "leader"};

typedef struct{
    char name[35];
    char pos[20];
    int age;
    int ord;
}Cat;

int minimum(int a, int b){
    if(a > b) return b;
    else return a;
}

int n, m;
int ans[10005];
Cat cat[10005];

int compare(const void *a, const void *b){
    if(cat[*(int*)a].ord > cat[*(int*)b].ord){
        return 1;
    }
    else if(cat[*(int*)a].ord == cat[*(int*)b].ord){
        if(cat[*(int*)a].age < cat[*(int*)b].age && strcmp(cat[*(int*)a].pos, order[4]) != 0){
            return 1;
        }
        else if(cat[*(int*)a].age > cat[*(int*)b].age && strcmp(cat[*(int*)a].pos, order[4]) == 0){
            return 1;
        }
        else if(cat[*(int*)a].age == cat[*(int*)b].age){
            if(strcmp(cat[*(int*)a].name, cat[*(int*)b].name) < 0){
                return 1;
            }
            else return -1;
        }
        else return -1;
    }
    else return -1;
}

int main(){
    while(scanf("%d%d", &n, &m) != EOF){
        for(int i = 0; i < n; i++){
            scanf("%s%s%d", cat[i].name, cat[i].pos, &cat[i].age);
            for(int j = 0; j < 8; j++){
                if(strcmp(order[j], cat[i].pos) == 0){
                    cat[i].ord = j;
                    break;
                }
            }
            ans[i] = i;
        }
        qsort(ans, n, sizeof(int), compare);
        int x = minimum(m, n);
        for(int i = 0; i < x; i++){
            printf("%s\n", cat[ans[i]].name);
        }
        memset(ans, -1, sizeof(ans));
    }
}
Editor is loading...