Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- struct Carti {
- long int id;
- long int scor;
- long int ok; //1 neluata
- };
- struct Librarie {
- long int id;
- long int signup;
- long int nrcarti;
- long int *carti;
- double ratie;
- long int cartiperzi;
- long int ok;
- };
- double ratie(struct Librarie lib[], struct Carti carte[], long int id) {
- double sum = 0;
- for (long int j = 0; j < lib[id].nrcarti; ++j)
- sum += (double) carte[lib[id].carti[j]].scor;
- return sum / (double) lib[id].signup;
- }
- int cmp(const void *a, const void *b) {
- double n1, n2;
- n1 = ((struct Librarie *) a)->ratie;
- n2 = ((struct Librarie *) b)->ratie;
- // return n1 - n2; //cresc
- return n2 - n1; //descresc
- }
- int main(int argc, char *argv[])
- {
- FILE *fin;
- fin = fopen(argv[1], "r");
- long int B, L, D;
- fscanf(fin, "%ld %ld %ld ", &B, &L, &D);
- FILE *fout;
- fout = fopen(argv[2], "w");
- struct Librarie *librarie = malloc((L + 1) * sizeof(struct Librarie));
- struct Carti *carti = malloc((B + 1) * sizeof(struct Carti));
- for (long int i = 0; i < L; ++i)
- librarie[i].carti = malloc(1000001 * sizeof(long int));
- for (long int i = 0; i < B; i++) {
- carti[i].id = i;
- fscanf(fin, "%ld ", &carti[i].scor);
- }
- for (long int i = 0; i < L; i++) {
- librarie[i].id = i;
- fscanf(fin, "%ld %ld %ld ", &librarie[i].nrcarti, &librarie[i].signup, &librarie[i].cartiperzi);
- for (long int j = 0; j < librarie[i].nrcarti; j++)
- fscanf(fin, "%ld ", &librarie[i].carti[j]);
- }
- for(int i = 0; i < B; ++i)
- carti[i].ok = 1;
- for (int i = 0; i < L; ++i)
- librarie[i].ratie = ratie(librarie, carti, i);
- qsort(librarie, L, sizeof(struct Librarie), cmp);
- long int **cartz;
- cartz = (long int **) malloc (1000001 * sizeof (long int *));
- for (long int i = 0; i < 1000001; i++)
- cartz[i] = (long int *) malloc (1000001 * sizeof (long int));
- int k = 0;
- for (int i = 0; i < D; ++i) {
- while(librarie[k].signup != i)
- i++;
- for(int z = k+1; z < L; ++z)
- librarie[z].signup+=i;
- while(librarie[k].nrcarti/librarie[k].cartiperzi > D)
- librarie[k].nrcarti--;
- for(int t = 0; t < librarie[k].nrcarti/librarie[k].cartiperzi; ++t) {
- if(carti[librarie[k].carti[t]].ok)
- cartz[k][t] = librarie[k].carti[t];
- printf("%ld ", librarie[k].carti[t]);
- carti[librarie[k].carti[t]].ok = 0;
- }
- //printf("\n");
- k++;
- }
- fprintf(fout, "%d\n", k);
- for(int i = 0; i < k; ++i)
- {
- fprintf(fout, "%ld %ld\n",librarie[i].id, librarie[k].nrcarti);
- for(int j = 0; j <librarie[k].nrcarti; ++j)
- fprintf(fout, "%ld ", cartz[i][j]);
- fprintf(fout, "\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement