#include #include typedef struct { char id; int len; } CONTADOR; char pob[32], desc[1002]; FILE *fp; CONTADOR info[26]; void read_line(char *cad) { strcpy(cad, "\0"); fscanf(fp, "%[^\n]", cad); fscanf(fp, "%*c"); } int compare(CONTADOR *a, CONTADOR *b) { if (a->len != b->len) return (b->len - a->len); return (a->id - b->id); } int solve_case(int *k, int *d) { int x, size; char c; (*k) = (*d) = 0; for (c='a'; c<='z'; c++) { info[c - 'a'].id = c; info[c - 'a'].len = 0; } size = strlen(desc); for (x=0; x= 'a' && desc[x] <= 'z') { if (info[desc[x] - 'a'].len == 0) (*k)++; info[desc[x] - 'a'].len++; } else (*d)++; } qsort(info, 26, sizeof(CONTADOR), compare); } main() { int ncasos, x, y, k, d; fp = fopen("inspector.in","r"); fscanf(fp, "%d\n", &ncasos); for (x = 0; x < ncasos; x++) { read_line(pob); read_line(desc); solve_case(&k, &d); printf("POBLACION: %s\n", pob); printf("TIPOS DE CULTIVOS: %d\n", k); printf("DESCONOCIDOS: %d\n", d); printf("CANTIDADES:\n"); for (y = 0; y < k; y++) printf("%c - %d\n", info[y].id, info[y].len); } }