Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x64
- #include <fstream>
- #include <deque>
- #include <iostream>
- #include <cstdlib>
- #include <algorithm>
- using namespace std;
- struct Ksiazka
- {
- long long int Punktacja;
- long long int Lp;
- };
- struct Wynik
- {
- long long int IndeksBiblioteki;
- deque<long long int> IndeksKsiazek;
- long long int finalnaLiczbaKsiazek;
- };
- struct Library {
- long long int Lp;
- long long int iloscKsiazek;
- long long int signupProcess;
- long long int booksPerDay;
- deque<Ksiazka*> ksiazkiWBibliotece;
- };
- bool SoRt(const Ksiazka* x, const Ksiazka* y)
- {
- return (x->Punktacja > y->Punktacja ? true : false);
- }
- void sortujInaczej(deque <Ksiazka*>& ksiazkiWBibliotece)
- {
- sort(ksiazkiWBibliotece.begin(), ksiazkiWBibliotece.end(), SoRt);
- }
- void czytajPlik(string nazwaPliku, int& liczbaKsiazek, int& liczbaBibliotek, int& dni, deque<Library>& Biblioteki, deque<Ksiazka>& Ksiazki)
- {
- fstream plik;
- plik.open(nazwaPliku, ios::in);
- if (plik)
- {
- Ksiazka tymczKsiazka;
- plik >> liczbaKsiazek;
- plik >> liczbaBibliotek;
- plik >> dni;
- for (int i = 0; i < liczbaKsiazek; i++)
- {
- plik >> tymczKsiazka.Punktacja;
- tymczKsiazka.Lp = i;
- Ksiazki.push_back(tymczKsiazka);
- }
- Library tymczLibrary;
- for (int j = 0; j < liczbaBibliotek; j++)
- {
- plik >> tymczLibrary.iloscKsiazek;
- plik >> tymczLibrary.signupProcess;
- plik >> tymczLibrary.booksPerDay;
- tymczLibrary.Lp = j;
- int zmiennyNrKsiazki;
- for (int l = 0; l < tymczLibrary.iloscKsiazek; l++)
- {
- plik >> zmiennyNrKsiazki;
- tymczLibrary.ksiazkiWBibliotece.push_back(&Ksiazki[zmiennyNrKsiazki]);
- }
- Biblioteki.push_back(tymczLibrary);
- tymczLibrary.ksiazkiWBibliotece.clear();
- }
- plik.close();
- }
- }
- int dziwka(int dni, long long int& finalnaLiczbaKsiazek, deque <Library> Biblioteki,int &helper)
- {
- int max = -1;
- long long int indeks;
- long long x;
- int tempHelp = 0;
- // helper = 0;
- for (long long int i = 0; i < Biblioteki.size(); i++)
- {
- long long int sumaPkt = 0;
- if (dni > Biblioteki[i].signupProcess)
- {
- long long int cos = ((dni - Biblioteki[i].signupProcess)) * Biblioteki[i].booksPerDay;
- if (cos < Biblioteki[i].ksiazkiWBibliotece.size())
- x = cos;
- else
- x = Biblioteki[i].ksiazkiWBibliotece.size();
- tempHelp = 0;
- for (int j = 0; j < x; j++)
- {
- int zmienna = Biblioteki[i].ksiazkiWBibliotece[j]->Punktacja;
- if (zmienna == -1)
- {
- if (x + 1 <= Biblioteki[i].ksiazkiWBibliotece.size())
- {
- x++;
- tempHelp++;
- }
- }
- else
- sumaPkt += zmienna;
- }
- if (max == -1 || sumaPkt > max)
- {
- max = sumaPkt;
- indeks = i;
- finalnaLiczbaKsiazek = x;
- helper = tempHelp;
- }
- }
- }
- if (max > 0)
- {
- return indeks;
- }
- else
- return -1;
- }
- void chwdppolicji(long long int dni, deque <Library>& Biblioteki)
- {
- deque<Wynik> FINALSCORE;
- long long int finalnaLiczbaKsiazek;
- long long int indeks;
- int counter = 0;
- fstream plik;
- // long long int LICZNIK = FINALSCORE.size();
- plik.open("outputE.txt", ios::out );
- if (plik.good())
- {
- for (long long int CHUJ = dni; CHUJ > 0; CHUJ--)
- {
- finalnaLiczbaKsiazek = 0;
- int helper = 0;
- indeks = dziwka(CHUJ, finalnaLiczbaKsiazek, Biblioteki,helper);
- if (indeks >= 0)
- {
- Wynik wynik;
- //wynik.IndeksBiblioteki = Biblioteki[indeks].Lp;
- plik << Biblioteki[indeks].Lp << " ";
- plik << (finalnaLiczbaKsiazek-helper) << endl;
- //cout << wynik.IndeksBiblioteki;
- for (long long int i = 0; i < finalnaLiczbaKsiazek; i++)//finalnaLiczbaKsiazek
- //wynik.IndeksKsiazek.push_back(Biblioteki[indeks].ksiazkiWBibliotece[i].Lp); ////
- {
- if (Biblioteki[indeks].ksiazkiWBibliotece[i]->Punktacja == -1)
- {
- helper--;
- if (helper < 0)
- {
- plik << Biblioteki[indeks].ksiazkiWBibliotece[i]->Lp;
- //Biblioteki[indeks].ksiazkiWBibliotece[i]->Punktacja = -1;
- plik << " ";
- }
- }
- else
- {
- plik << Biblioteki[indeks].ksiazkiWBibliotece[i]->Lp;
- Biblioteki[indeks].ksiazkiWBibliotece[i]->Punktacja = -1;
- plik << " ";
- }
- }
- plik << endl;
- Biblioteki.erase(Biblioteki.begin() + indeks);
- counter++;
- //wynik.finalnaLiczbaKsiazek = finalnaLiczbaKsiazek;
- //FINALSCORE.push_back(wynik);
- //counter++;
- //
- //plik << FINALSCORE[0].IndeksBiblioteki << ' ';
- //plik << FINALSCORE[0].finalnaLiczbaKsiazek << endl;////
- //long long int helper = FINALSCORE[0].IndeksKsiazek.size();
- //for (long long int j = 0; j < helper; j++)
- //{
- // plik << FINALSCORE[0].IndeksKsiazek[j] << " ";
- //}
- //plik << endl;
- // wypiszPlik("output2.txt", FINALSCORE);
- FINALSCORE.clear();
- }
- }
- plik << counter;
- plik.close();
- }
- }
- int main()
- {
- deque<Library> Biblioteki;
- deque<Ksiazka> Ksiazki;
- int liczbaKsiazek;
- int liczbaBibliotek;
- int dni;
- string nazwaPliku = "e_so_many_books.txt";
- czytajPlik(nazwaPliku, liczbaKsiazek, liczbaBibliotek, dni, Biblioteki, Ksiazki);
- for (int i = 0; i < Biblioteki.size(); i++)
- {
- sortujInaczej(Biblioteki[i].ksiazkiWBibliotece);
- }
- // cout<<Biblioteki[0].ksiazkiWBibliotece[0]->Punktacja<<endl;
- // Ksiazki[0].Punktacja = -1;
- // cout<<Biblioteki[0].ksiazkiWBibliotece[0]->Punktacja<<endl;
- chwdppolicji(dni, Biblioteki);
- cout << "koniec" << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement