Pagini recente » Cod sursa (job #2599137) | Cod sursa (job #189981) | Cod sursa (job #1595902) | Cod sursa (job #1699704) | Cod sursa (job #303503)
Cod sursa(job #303503)
#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) {
int d;
d = *(*((char**)x)) - *(*((char**)y));
if(d < 0)
return -1;
if(d > 0)
return 1;
return strcmp(*((char**)x) + 1, *((char**)y) + 1);
}
int main() {
int n, i, j, v;
char x;
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) + 2) * sizeof(char));
strcpy(cuv[i] + 1, tmp);
x = 0;
for(j = 0; j < strlen(tmp); j++)
x ^= tmp[j];
*(cuv[i]) = x;
/*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 [%x:%s]\n", i, *(cuv[i]), cuv[i] + 1);*/
v = 0;
i = 0;
while(i < n) {
j = i + 1;
while(j < n && *(cuv[i]) == *(cuv[j]) &&
strcmp(cuv[i] + 1, cuv[j] + 1) == 0)
j++;
if(j - i == 1)
v++;
i = j;
}
for(i = 0; i < n; i++)
free(cuv[i]);
free(cuv);
f = fopen("restante.out", "w");
fprintf(f, "%d\n", v);
fclose(f);
return 0;
}