Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.98 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. struct Carti {
  6. long int id;
  7. long int scor;
  8. long int ok; //1 neluata
  9. };
  10.  
  11. struct Librarie {
  12. long int id;
  13. long int signup;
  14. long int nrcarti;
  15. long int *carti;
  16. double ratie;
  17. long int cartiperzi;
  18. long int ok;
  19. };
  20.  
  21. double ratie(struct Librarie lib[], struct Carti carte[], long int id) {
  22. double sum = 0;
  23. for (long int j = 0; j < lib[id].nrcarti; ++j)
  24. sum += (double) carte[lib[id].carti[j]].scor;
  25.  
  26. return sum / (double) lib[id].signup;
  27. }
  28.  
  29. int cmp(const void *a, const void *b) {
  30. double n1, n2;
  31. n1 = ((struct Librarie *) a)->ratie;
  32. n2 = ((struct Librarie *) b)->ratie;
  33.  
  34. // return n1 - n2; //cresc
  35. return n2 - n1; //descresc
  36. }
  37.  
  38.  
  39. int main(int argc, char *argv[])
  40. {
  41.  
  42. FILE *fin;
  43. fin = fopen(argv[1], "r");
  44. long int B, L, D;
  45. fscanf(fin, "%ld %ld %ld ", &B, &L, &D);
  46.  
  47. FILE *fout;
  48. fout = fopen(argv[2], "w");
  49.  
  50. struct Librarie *librarie = malloc((L + 1) * sizeof(struct Librarie));
  51. struct Carti *carti = malloc((B + 1) * sizeof(struct Carti));
  52.  
  53. for (long int i = 0; i < L; ++i)
  54. librarie[i].carti = malloc(1000001 * sizeof(long int));
  55.  
  56. for (long int i = 0; i < B; i++) {
  57. carti[i].id = i;
  58. fscanf(fin, "%ld ", &carti[i].scor);
  59. }
  60.  
  61. for (long int i = 0; i < L; i++) {
  62. librarie[i].id = i;
  63. fscanf(fin, "%ld %ld %ld ", &librarie[i].nrcarti, &librarie[i].signup, &librarie[i].cartiperzi);
  64. for (long int j = 0; j < librarie[i].nrcarti; j++)
  65. fscanf(fin, "%ld ", &librarie[i].carti[j]);
  66. }
  67.  
  68. for(int i = 0; i < B; ++i)
  69. carti[i].ok = 1;
  70.  
  71. for (int i = 0; i < L; ++i)
  72. librarie[i].ratie = ratie(librarie, carti, i);
  73.  
  74.  
  75. qsort(librarie, L, sizeof(struct Librarie), cmp);
  76.  
  77. long int **cartz;
  78. cartz = (long int **) malloc (1000001 * sizeof (long int *));
  79. for (long int i = 0; i < 1000001; i++)
  80. cartz[i] = (long int *) malloc (1000001 * sizeof (long int));
  81.  
  82.  
  83. int k = 0;
  84. for (int i = 0; i < D; ++i) {
  85.  
  86. while(librarie[k].signup != i)
  87. i++;
  88.  
  89. for(int z = k+1; z < L; ++z)
  90. librarie[z].signup+=i;
  91.  
  92.  
  93. while(librarie[k].nrcarti/librarie[k].cartiperzi > D)
  94. librarie[k].nrcarti--;
  95.  
  96. for(int t = 0; t < librarie[k].nrcarti/librarie[k].cartiperzi; ++t) {
  97. if(carti[librarie[k].carti[t]].ok)
  98. cartz[k][t] = librarie[k].carti[t];
  99. printf("%ld ", librarie[k].carti[t]);
  100. carti[librarie[k].carti[t]].ok = 0;
  101.  
  102. }
  103.  
  104. //printf("\n");
  105. k++;
  106. }
  107.  
  108. fprintf(fout, "%d\n", k);
  109. for(int i = 0; i < k; ++i)
  110. {
  111. fprintf(fout, "%ld %ld\n",librarie[i].id, librarie[k].nrcarti);
  112.  
  113. for(int j = 0; j <librarie[k].nrcarti; ++j)
  114. fprintf(fout, "%ld ", cartz[i][j]);
  115.  
  116. fprintf(fout, "\n");
  117. }
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement