Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.78 KB | None | 0 0
  1. //Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x64
  2. #include <fstream>
  3. #include <deque>
  4. #include <iostream>
  5. #include <cstdlib>
  6. #include <algorithm>
  7. using namespace std;
  8.  
  9. struct Ksiazka
  10. {
  11. long long int Punktacja;
  12. long long int Lp;
  13. };
  14. struct Wynik
  15. {
  16. long long int IndeksBiblioteki;
  17. deque<long long int> IndeksKsiazek;
  18. long long int finalnaLiczbaKsiazek;
  19. };
  20.  
  21. struct Library {
  22. long long int Lp;
  23. long long int iloscKsiazek;
  24. long long int signupProcess;
  25. long long int booksPerDay;
  26. deque<Ksiazka*> ksiazkiWBibliotece;
  27. };
  28.  
  29. bool SoRt(const Ksiazka* x, const Ksiazka* y)
  30. {
  31. return (x->Punktacja > y->Punktacja ? true : false);
  32. }
  33.  
  34. void sortujInaczej(deque <Ksiazka*>& ksiazkiWBibliotece)
  35. {
  36. sort(ksiazkiWBibliotece.begin(), ksiazkiWBibliotece.end(), SoRt);
  37. }
  38.  
  39. void czytajPlik(string nazwaPliku, int& liczbaKsiazek, int& liczbaBibliotek, int& dni, deque<Library>& Biblioteki, deque<Ksiazka>& Ksiazki)
  40. {
  41. fstream plik;
  42. plik.open(nazwaPliku, ios::in);
  43. if (plik)
  44. {
  45. Ksiazka tymczKsiazka;
  46. plik >> liczbaKsiazek;
  47. plik >> liczbaBibliotek;
  48. plik >> dni;
  49. for (int i = 0; i < liczbaKsiazek; i++)
  50. {
  51. plik >> tymczKsiazka.Punktacja;
  52. tymczKsiazka.Lp = i;
  53. Ksiazki.push_back(tymczKsiazka);
  54. }
  55. Library tymczLibrary;
  56. for (int j = 0; j < liczbaBibliotek; j++)
  57. {
  58.  
  59. plik >> tymczLibrary.iloscKsiazek;
  60. plik >> tymczLibrary.signupProcess;
  61. plik >> tymczLibrary.booksPerDay;
  62. tymczLibrary.Lp = j;
  63. int zmiennyNrKsiazki;
  64. for (int l = 0; l < tymczLibrary.iloscKsiazek; l++)
  65. {
  66. plik >> zmiennyNrKsiazki;
  67. tymczLibrary.ksiazkiWBibliotece.push_back(&Ksiazki[zmiennyNrKsiazki]);
  68. }
  69. Biblioteki.push_back(tymczLibrary);
  70. tymczLibrary.ksiazkiWBibliotece.clear();
  71. }
  72. plik.close();
  73. }
  74. }
  75.  
  76. int dziwka(int dni, long long int& finalnaLiczbaKsiazek, deque <Library> Biblioteki,int &helper)
  77. {
  78. int max = -1;
  79. long long int indeks;
  80. long long x;
  81. int tempHelp = 0;
  82. // helper = 0;
  83. for (long long int i = 0; i < Biblioteki.size(); i++)
  84. {
  85. long long int sumaPkt = 0;
  86. if (dni > Biblioteki[i].signupProcess)
  87. {
  88. long long int cos = ((dni - Biblioteki[i].signupProcess)) * Biblioteki[i].booksPerDay;
  89. if (cos < Biblioteki[i].ksiazkiWBibliotece.size())
  90. x = cos;
  91. else
  92. x = Biblioteki[i].ksiazkiWBibliotece.size();
  93. tempHelp = 0;
  94. for (int j = 0; j < x; j++)
  95. {
  96. int zmienna = Biblioteki[i].ksiazkiWBibliotece[j]->Punktacja;
  97. if (zmienna == -1)
  98. {
  99. if (x + 1 <= Biblioteki[i].ksiazkiWBibliotece.size())
  100. {
  101. x++;
  102. tempHelp++;
  103. }
  104.  
  105. }
  106. else
  107. sumaPkt += zmienna;
  108. }
  109. if (max == -1 || sumaPkt > max)
  110. {
  111. max = sumaPkt;
  112. indeks = i;
  113. finalnaLiczbaKsiazek = x;
  114. helper = tempHelp;
  115. }
  116. }
  117. }
  118. if (max > 0)
  119. {
  120. return indeks;
  121. }
  122. else
  123. return -1;
  124. }
  125. void chwdppolicji(long long int dni, deque <Library>& Biblioteki)
  126. {
  127. deque<Wynik> FINALSCORE;
  128. long long int finalnaLiczbaKsiazek;
  129. long long int indeks;
  130. int counter = 0;
  131. fstream plik;
  132. // long long int LICZNIK = FINALSCORE.size();
  133. plik.open("outputE.txt", ios::out );
  134. if (plik.good())
  135. {
  136. for (long long int CHUJ = dni; CHUJ > 0; CHUJ--)
  137. {
  138. finalnaLiczbaKsiazek = 0;
  139. int helper = 0;
  140. indeks = dziwka(CHUJ, finalnaLiczbaKsiazek, Biblioteki,helper);
  141. if (indeks >= 0)
  142. {
  143. Wynik wynik;
  144. //wynik.IndeksBiblioteki = Biblioteki[indeks].Lp;
  145. plik << Biblioteki[indeks].Lp << " ";
  146. plik << (finalnaLiczbaKsiazek-helper) << endl;
  147. //cout << wynik.IndeksBiblioteki;
  148. for (long long int i = 0; i < finalnaLiczbaKsiazek; i++)//finalnaLiczbaKsiazek
  149. //wynik.IndeksKsiazek.push_back(Biblioteki[indeks].ksiazkiWBibliotece[i].Lp); ////
  150. {
  151. if (Biblioteki[indeks].ksiazkiWBibliotece[i]->Punktacja == -1)
  152. {
  153. helper--;
  154.  
  155. if (helper < 0)
  156. {
  157. plik << Biblioteki[indeks].ksiazkiWBibliotece[i]->Lp;
  158. //Biblioteki[indeks].ksiazkiWBibliotece[i]->Punktacja = -1;
  159. plik << " ";
  160. }
  161. }
  162. else
  163. {
  164. plik << Biblioteki[indeks].ksiazkiWBibliotece[i]->Lp;
  165. Biblioteki[indeks].ksiazkiWBibliotece[i]->Punktacja = -1;
  166. plik << " ";
  167.  
  168. }
  169. }
  170.  
  171.  
  172.  
  173. plik << endl;
  174. Biblioteki.erase(Biblioteki.begin() + indeks);
  175. counter++;
  176. //wynik.finalnaLiczbaKsiazek = finalnaLiczbaKsiazek;
  177. //FINALSCORE.push_back(wynik);
  178. //counter++;
  179. //
  180. //plik << FINALSCORE[0].IndeksBiblioteki << ' ';
  181. //plik << FINALSCORE[0].finalnaLiczbaKsiazek << endl;////
  182. //long long int helper = FINALSCORE[0].IndeksKsiazek.size();
  183. //for (long long int j = 0; j < helper; j++)
  184. //{
  185. // plik << FINALSCORE[0].IndeksKsiazek[j] << " ";
  186. //}
  187. //plik << endl;
  188. // wypiszPlik("output2.txt", FINALSCORE);
  189. FINALSCORE.clear();
  190. }
  191. }
  192. plik << counter;
  193. plik.close();
  194. }
  195. }
  196.  
  197. int main()
  198. {
  199. deque<Library> Biblioteki;
  200. deque<Ksiazka> Ksiazki;
  201. int liczbaKsiazek;
  202. int liczbaBibliotek;
  203. int dni;
  204. string nazwaPliku = "e_so_many_books.txt";
  205. czytajPlik(nazwaPliku, liczbaKsiazek, liczbaBibliotek, dni, Biblioteki, Ksiazki);
  206. for (int i = 0; i < Biblioteki.size(); i++)
  207. {
  208. sortujInaczej(Biblioteki[i].ksiazkiWBibliotece);
  209. }
  210. // cout<<Biblioteki[0].ksiazkiWBibliotece[0]->Punktacja<<endl;
  211. // Ksiazki[0].Punktacja = -1;
  212. // cout<<Biblioteki[0].ksiazkiWBibliotece[0]->Punktacja<<endl;
  213.  
  214. chwdppolicji(dni, Biblioteki);
  215. cout << "koniec" << endl;
  216. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement