Cod sursa(job #303279)

Utilizator luckBogdan Luca luck Data 9 aprilie 2009 18:30:08
Problema Restante Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int char_cmp(const void *x, const void *y) {
    int d;
    d = *((char*)x) - *((char*)y);
    if(d < 0)
        return -1;
    if(d > 0)
        return 1;
    return 0;
}

int str_cmp(const void *x, const void *y) {
    return strcmp(*((char**)x), *((char**)y));
}

int main() {
    int n, i, j, v;
    char tmp[17];
    char **cuv;
    FILE *f;
    f = fopen("restante.in", "r");
    fscanf(f, "%d\n", &n);
    cuv = (char**)malloc(n * sizeof(char*));
    for(i = 0; i < n; i++) {
        fscanf(f, "%s\n", tmp);
        qsort(tmp, strlen(tmp), sizeof(char), char_cmp);
        cuv[i] = (char*)malloc((strlen(tmp) + 1) * sizeof(char));
        strcpy(cuv[i], tmp);
        /*printf("am citit %s\n", tmp);*/
    }
    fclose(f);
    qsort(cuv, n, sizeof(char*), str_cmp);
    /*for(i = 0; i < n; i++)
        printf("cuv %d este %s\n", i, cuv[i]);*/
    for(i = 0; i < n; i++)
        free(cuv[i]);
    v = 0;
    i = 0;
    while(i < n) {
        j = i + 1;
        while(j < n && strcmp(cuv[i], cuv[j]) == 0)
            j++;
        if(j - i == 1)
            v++;
        i = j;
    }
    free(cuv);
    f = fopen("restante.out", "w");
    fprintf(f, "%d\n", v);
    fclose(f);
    return 0;
}