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 <vector>
- #include <iostream>
- #include<fstream>
- #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;
- //int pointsPerDay;
- };
- 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);
- //reverse(ksiazkiWBibliotece.begin(), ksiazkiWBibliotece.end());
- }
- void czytajPlik(string nazwaPliku, int& liczbaKsiazek, int& liczbaBibliotek, int& dni, deque<Library>& Biblioteki, deque<Ksiazka>& Ksiazki)
- {
- /*
- deque<Library> Biblioteki;
- deque<Ksiazka> Ksiazki;
- int licznik;
- int liczbaKsiazek;
- int liczbaBibliotek;
- int dni;
- */
- 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;
- deque<Ksiazka>tymczKsiazki;
- 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;
- tymczKsiazki.push_back(Ksiazki[zmiennyNrKsiazki]);
- }
- tymczLibrary.ksiazkiWBibliotece = tymczKsiazki;
- tymczKsiazki.clear();
- Biblioteki.push_back(tymczLibrary);
- }
- plik.close();
- }
- }
- void wypiszPlik(string nazwaPliku, deque<Wynik> FINALSCORE)
- {
- fstream plik;
- long long int LICZNIK = FINALSCORE.size();
- plik.open(nazwaPliku, ios::out | ios::app);
- if (plik.good())
- {
- plik << LICZNIK << endl;
- for (long long int i = 0; i < LICZNIK; i++)
- {
- plik << FINALSCORE[i].IndeksBiblioteki << ' ';
- plik << FINALSCORE[i].finalnaLiczbaKsiazek << endl;////
- long long int helper = FINALSCORE[i].IndeksKsiazek.size();
- for (long long int j = 0; j < helper; j++)
- {
- plik << FINALSCORE[i].IndeksKsiazek[j] << " ";
- }
- plik << endl;
- }
- plik.close();
- }
- }
- int dziwka(int dni, long long int& finalnaLiczbaKsiazek, deque <Library> Biblioteki)
- {
- int max = -1;
- long long int indeks;
- long long x;
- 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();
- for (int j = 0; j < x; j++)
- {
- sumaPkt += Biblioteki[i].ksiazkiWBibliotece[j].Punktacja;
- }
- if (max == -1 || sumaPkt > max)
- {
- max = sumaPkt;
- indeks = i;
- if (Biblioteki[i].ksiazkiWBibliotece.size() > x)
- finalnaLiczbaKsiazek = x;
- else
- finalnaLiczbaKsiazek = Biblioteki[i].ksiazkiWBibliotece.size();
- }
- }
- }
- 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("outputD.txt", ios::out | ios::app);
- if (plik.good())
- {
- for (long long int CHUJ = dni; CHUJ > 0; CHUJ--)
- {
- finalnaLiczbaKsiazek = 0;
- indeks = dziwka(CHUJ, finalnaLiczbaKsiazek, Biblioteki);
- if (indeks >= 0)
- {
- Wynik wynik;
- //wynik.IndeksBiblioteki = Biblioteki[indeks].Lp;
- plik << Biblioteki[indeks].Lp << " ";
- plik << finalnaLiczbaKsiazek << endl;
- //cout << wynik.IndeksBiblioteki;
- for (long long int i = 0; i < finalnaLiczbaKsiazek; i++)//finalnaLiczbaKsiazek
- //wynik.IndeksKsiazek.push_back(Biblioteki[indeks].ksiazkiWBibliotece[i].Lp); ////
- {
- plik << Biblioteki[indeks].ksiazkiWBibliotece[i].Lp;
- 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();
- // counter++;
- }
- else
- {
- plik << counter;
- plik.close();
- break;
- }
- //dodawanie do WYNIKU
- }
- plik << counter;
- plik.close();
- }
- }
- int main()
- {
- deque<Library> Biblioteki;
- deque<Ksiazka> Ksiazki;
- int liczbaKsiazek;
- int liczbaBibliotek;
- int dni;
- // int LICZNIK;
- string nazwaPliku = "d_tough_choices.txt";
- czytajPlik(nazwaPliku, liczbaKsiazek, liczbaBibliotek, dni, Biblioteki, Ksiazki);
- for (int i = 0; i < Biblioteki.size(); i++)
- {
- sortujInaczej(Biblioteki[i].ksiazkiWBibliotece);
- }
- string output = "output3.txt";
- chwdppolicji(dni, Biblioteki);
- //deque<Wynik> FINALSCORE = chwdppolicji(dni, Biblioteki);
- //deque<Wynik> FINALSCORE = chwdppolicji(dni, Biblioteki);
- //wypiszPlik(output, FINALSCORE);
- cout << "koniec" << endl;
- }
- /* KOŃCOWA LOGIKA
- 1. odczyt danych
- 2. dodanie do struktury Library razem z posortowaną punktacją
- 2.5 sortujemy Library pod wzglęgem opłacalności PointsPerDay (chyba)
- ~~
- 3. patrzymy która biblioteka się opłaca najbardziej
- 4. patrzymy czy opłaca się ją skanować, tzn. czy po SingUpProcess nadal zostaną dni_do_deadlinu
- 5. patrzymy ile dni zejdzie na zeskanowanie jej całej
- -jeżeli zmieści się 'cała', to dodajemy ją do outputu razem ze wszystkimi książkami
- -jeżeli się nie zmieści 'cała' to dodajemy tyle książek ile dało radę zeskanować do outputu
- 6. ponawiamy proces od punktu #3
- iloscpkt/(iloscdni-signup)*ksiazkiperDay
- iloscDniMax-signup(2dziennie) -> 3dni (7+6 4+2 1)
- DNI DO DEADLINU
- bilbioteka0 -> DDD - signUpProcess0 -> . . . . .
- bilbioteka1 -> DDD -singUpProcess0 - singUpProcess1 -> . . . . .
- 0 3dni robocze (7,6,3,2) 1dziennie
- 1 5dni robocze(2,1,1,1,1,1) 1 dziennie
- bilbioteka0 -> singupProcess 1 dzień, (2, 1)
- bibliota1 -> sinupProcess 5 dni, (9, 8, 7, 6)
- 9
- sumaPkt for(int i=0;i<(Dni-signup)*booksPerDay;i++)
- {
- suma pkt+=vektorksiazka[i];
- }
- int max = -1;
- nt indeks;
- for(int i = 0; i<Biblioteki.size(); i++)
- {
- int sumaPkt = 0;
- for(int j=0; j<(dni-Biblioteki[i].singupProcess)*booksPerDay;j++)
- {
- sumaPkt += Biblioteki[i].ksiazkiWBibliotece[j].Punktacja;
- }
- if(max == -1||sumaPkt>max)
- {
- max = sumaPkt;
- indeks = i;
- }
- }
- void LogikaToKurwa(deque <Library> Biblioteki)
- {
- deque <Library> sortowaneDniami=Biblioteki;
- sort(ksiazkiWBibliotece.begin(), ksiazkiWBibliotece.end());
- reverse(ksiazkiWBibliotece.begin(), ksiazkiWBibliotece.end());
- for(int i=0;i<Biblioteki.size()-1;i++)
- {
- if(Biblioteki[i].signupProcess>Biblioteki[i+1].signupProcess|Biblioteki[i].signupProcess==Biblioteki[i+1].signupProcess
- & Biblioteki[i].signupProcess>Biblioteki[i+1].signupProcess)
- }
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement