Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.05 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 <vector>
  5. #include <iostream>
  6. #include<fstream>
  7. #include<cstdlib>
  8. #include<algorithm>
  9. using namespace std;
  10.  
  11.  
  12.  
  13. struct Ksiazka
  14. {
  15. long long int Punktacja;
  16. long long int Lp;
  17. };
  18. struct Wynik
  19. {
  20. long long int IndeksBiblioteki;
  21. deque<long long int> IndeksKsiazek;
  22. long long int finalnaLiczbaKsiazek;
  23. };
  24.  
  25. struct Library {
  26. long long int Lp;
  27. long long int iloscKsiazek;
  28. long long int signupProcess;
  29. long long int booksPerDay;
  30. deque<Ksiazka> ksiazkiWBibliotece;
  31. //int pointsPerDay;
  32. };
  33.  
  34. bool SoRt(const Ksiazka& x, const Ksiazka& y)
  35. {
  36. return (x.Punktacja > y.Punktacja ? true : false);
  37. }
  38.  
  39. void sortujInaczej(deque <Ksiazka>& ksiazkiWBibliotece)
  40. {
  41. sort(ksiazkiWBibliotece.begin(), ksiazkiWBibliotece.end(), SoRt);
  42. //reverse(ksiazkiWBibliotece.begin(), ksiazkiWBibliotece.end());
  43. }
  44.  
  45. void czytajPlik(string nazwaPliku, int& liczbaKsiazek, int& liczbaBibliotek, int& dni, deque<Library>& Biblioteki, deque<Ksiazka>& Ksiazki)
  46. {
  47. /*
  48. deque<Library> Biblioteki;
  49. deque<Ksiazka> Ksiazki;
  50. int licznik;
  51. int liczbaKsiazek;
  52. int liczbaBibliotek;
  53. int dni;
  54. */
  55. fstream plik;
  56. plik.open(nazwaPliku, ios::in);
  57. if (plik)
  58. {
  59. Ksiazka tymczKsiazka;
  60. plik >> liczbaKsiazek;
  61. plik >> liczbaBibliotek;
  62. plik >> dni;
  63. for (int i = 0; i < liczbaKsiazek; i++)
  64. {
  65. plik >> tymczKsiazka.Punktacja;
  66. tymczKsiazka.Lp = i;
  67. Ksiazki.push_back(tymczKsiazka);
  68. }
  69. Library tymczLibrary;
  70. deque<Ksiazka>tymczKsiazki;
  71. for (int j = 0; j < liczbaBibliotek; j++)
  72. {
  73.  
  74. plik >> tymczLibrary.iloscKsiazek;
  75. plik >> tymczLibrary.signupProcess;
  76. plik >> tymczLibrary.booksPerDay;
  77. tymczLibrary.Lp = j;
  78. int zmiennyNrKsiazki;
  79. for (int l = 0; l < tymczLibrary.iloscKsiazek; l++)
  80. {
  81. plik >> zmiennyNrKsiazki;
  82. tymczKsiazki.push_back(Ksiazki[zmiennyNrKsiazki]);
  83. }
  84. tymczLibrary.ksiazkiWBibliotece = tymczKsiazki;
  85. tymczKsiazki.clear();
  86. Biblioteki.push_back(tymczLibrary);
  87. }
  88. plik.close();
  89. }
  90. }
  91.  
  92. void wypiszPlik(string nazwaPliku, deque<Wynik> FINALSCORE)
  93. {
  94. fstream plik;
  95. long long int LICZNIK = FINALSCORE.size();
  96. plik.open(nazwaPliku, ios::out | ios::app);
  97. if (plik.good())
  98. {
  99. plik << LICZNIK << endl;
  100. for (long long int i = 0; i < LICZNIK; i++)
  101. {
  102. plik << FINALSCORE[i].IndeksBiblioteki << ' ';
  103. plik << FINALSCORE[i].finalnaLiczbaKsiazek << endl;////
  104. long long int helper = FINALSCORE[i].IndeksKsiazek.size();
  105. for (long long int j = 0; j < helper; j++)
  106. {
  107. plik << FINALSCORE[i].IndeksKsiazek[j] << " ";
  108. }
  109. plik << endl;
  110. }
  111. plik.close();
  112. }
  113. }
  114.  
  115. int dziwka(int dni, long long int& finalnaLiczbaKsiazek, deque <Library> Biblioteki)
  116. {
  117. int max = -1;
  118. long long int indeks;
  119. long long x;
  120. for (long long int i = 0; i < Biblioteki.size(); i++)
  121. {
  122. long long int sumaPkt = 0;
  123. if (dni > Biblioteki[i].signupProcess)
  124. {
  125. long long int cos = (dni - Biblioteki[i].signupProcess) * Biblioteki[i].booksPerDay;
  126. if (cos < Biblioteki[i].ksiazkiWBibliotece.size())
  127. x = cos;
  128. else
  129. x = Biblioteki[i].ksiazkiWBibliotece.size();
  130. for (int j = 0; j < x; j++)
  131. {
  132. sumaPkt += Biblioteki[i].ksiazkiWBibliotece[j].Punktacja;
  133. }
  134. if (max == -1 || sumaPkt > max)
  135. {
  136. max = sumaPkt;
  137. indeks = i;
  138. if (Biblioteki[i].ksiazkiWBibliotece.size() > x)
  139. finalnaLiczbaKsiazek = x;
  140. else
  141. finalnaLiczbaKsiazek = Biblioteki[i].ksiazkiWBibliotece.size();
  142.  
  143. }
  144. }
  145. }
  146. if (max > 0)
  147. {
  148. return indeks;
  149. }
  150. else
  151. return -1;
  152. }
  153. void chwdppolicji(long long int dni, deque <Library>& Biblioteki)
  154. {
  155. deque<Wynik> FINALSCORE;
  156. long long int finalnaLiczbaKsiazek;
  157. long long int indeks;
  158. int counter = 0;
  159. fstream plik;
  160. long long int LICZNIK = FINALSCORE.size();
  161. plik.open("outputD.txt", ios::out | ios::app);
  162. if (plik.good())
  163. {
  164. for (long long int CHUJ = dni; CHUJ > 0; CHUJ--)
  165. {
  166. finalnaLiczbaKsiazek = 0;
  167. indeks = dziwka(CHUJ, finalnaLiczbaKsiazek, Biblioteki);
  168. if (indeks >= 0)
  169. {
  170. Wynik wynik;
  171. //wynik.IndeksBiblioteki = Biblioteki[indeks].Lp;
  172. plik << Biblioteki[indeks].Lp << " ";
  173. plik << finalnaLiczbaKsiazek << endl;
  174. //cout << wynik.IndeksBiblioteki;
  175. for (long long int i = 0; i < finalnaLiczbaKsiazek; i++)//finalnaLiczbaKsiazek
  176. //wynik.IndeksKsiazek.push_back(Biblioteki[indeks].ksiazkiWBibliotece[i].Lp); ////
  177. {
  178. plik << Biblioteki[indeks].ksiazkiWBibliotece[i].Lp;
  179. plik << " ";
  180. }
  181. plik << endl;
  182. Biblioteki.erase(Biblioteki.begin() + indeks);
  183. counter++;
  184. //wynik.finalnaLiczbaKsiazek = finalnaLiczbaKsiazek;
  185. //FINALSCORE.push_back(wynik);
  186. //counter++;
  187. //
  188. //plik << FINALSCORE[0].IndeksBiblioteki << ' ';
  189. //plik << FINALSCORE[0].finalnaLiczbaKsiazek << endl;////
  190. //long long int helper = FINALSCORE[0].IndeksKsiazek.size();
  191. //for (long long int j = 0; j < helper; j++)
  192. //{
  193. // plik << FINALSCORE[0].IndeksKsiazek[j] << " ";
  194. //}
  195. //plik << endl;
  196. // wypiszPlik("output2.txt", FINALSCORE);
  197. FINALSCORE.clear();
  198. // counter++;
  199.  
  200. }
  201. else
  202. {
  203. plik << counter;
  204. plik.close();
  205. break;
  206. }
  207. //dodawanie do WYNIKU
  208. }
  209. plik << counter;
  210. plik.close();
  211. }
  212.  
  213. }
  214.  
  215.  
  216.  
  217.  
  218. int main()
  219. {
  220. deque<Library> Biblioteki;
  221. deque<Ksiazka> Ksiazki;
  222. int liczbaKsiazek;
  223. int liczbaBibliotek;
  224. int dni;
  225. // int LICZNIK;
  226. string nazwaPliku = "d_tough_choices.txt";
  227. czytajPlik(nazwaPliku, liczbaKsiazek, liczbaBibliotek, dni, Biblioteki, Ksiazki);
  228.  
  229. for (int i = 0; i < Biblioteki.size(); i++)
  230. {
  231. sortujInaczej(Biblioteki[i].ksiazkiWBibliotece);
  232. }
  233. string output = "output3.txt";
  234. chwdppolicji(dni, Biblioteki);
  235. //deque<Wynik> FINALSCORE = chwdppolicji(dni, Biblioteki);
  236. //deque<Wynik> FINALSCORE = chwdppolicji(dni, Biblioteki);
  237. //wypiszPlik(output, FINALSCORE);
  238. cout << "koniec" << endl;
  239. }
  240.  
  241.  
  242. /* KOŃCOWA LOGIKA
  243. 1. odczyt danych
  244. 2. dodanie do struktury Library razem z posortowaną punktacją
  245. 2.5 sortujemy Library pod wzglęgem opłacalności PointsPerDay (chyba)
  246. ~~
  247. 3. patrzymy która biblioteka się opłaca najbardziej
  248. 4. patrzymy czy opłaca się ją skanować, tzn. czy po SingUpProcess nadal zostaną dni_do_deadlinu
  249. 5. patrzymy ile dni zejdzie na zeskanowanie jej całej
  250. -jeżeli zmieści się 'cała', to dodajemy ją do outputu razem ze wszystkimi książkami
  251. -jeżeli się nie zmieści 'cała' to dodajemy tyle książek ile dało radę zeskanować do outputu
  252. 6. ponawiamy proces od punktu #3
  253.  
  254. iloscpkt/(iloscdni-signup)*ksiazkiperDay
  255.  
  256. iloscDniMax-signup(2dziennie) -> 3dni (7+6 4+2 1)
  257. DNI DO DEADLINU
  258. bilbioteka0 -> DDD - signUpProcess0 -> . . . . .
  259. bilbioteka1 -> DDD -singUpProcess0 - singUpProcess1 -> . . . . .
  260. 0 3dni robocze (7,6,3,2) 1dziennie
  261. 1 5dni robocze(2,1,1,1,1,1) 1 dziennie
  262.  
  263. bilbioteka0 -> singupProcess 1 dzień, (2, 1)
  264. bibliota1 -> sinupProcess 5 dni, (9, 8, 7, 6)
  265. 9
  266. sumaPkt for(int i=0;i<(Dni-signup)*booksPerDay;i++)
  267. {
  268. suma pkt+=vektorksiazka[i];
  269. }
  270. int max = -1;
  271. nt indeks;
  272. for(int i = 0; i<Biblioteki.size(); i++)
  273. {
  274. int sumaPkt = 0;
  275. for(int j=0; j<(dni-Biblioteki[i].singupProcess)*booksPerDay;j++)
  276. {
  277. sumaPkt += Biblioteki[i].ksiazkiWBibliotece[j].Punktacja;
  278. }
  279. if(max == -1||sumaPkt>max)
  280. {
  281. max = sumaPkt;
  282. indeks = i;
  283. }
  284. }
  285.  
  286.  
  287.  
  288. void LogikaToKurwa(deque <Library> Biblioteki)
  289. {
  290. deque <Library> sortowaneDniami=Biblioteki;
  291. sort(ksiazkiWBibliotece.begin(), ksiazkiWBibliotece.end());
  292. reverse(ksiazkiWBibliotece.begin(), ksiazkiWBibliotece.end());
  293.  
  294. for(int i=0;i<Biblioteki.size()-1;i++)
  295. {
  296. if(Biblioteki[i].signupProcess>Biblioteki[i+1].signupProcess|Biblioteki[i].signupProcess==Biblioteki[i+1].signupProcess
  297. & Biblioteki[i].signupProcess>Biblioteki[i+1].signupProcess)
  298. }
  299. }
  300.  
  301. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement