Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- using namespace std;
- class Eksperyment{
- public:
- string imie,nazwisko;
- int zdolnoscNaukowca;
- Eksperyment *after= nullptr;
- Eksperyment(string,string,int);
- };
- Eksperyment::Eksperyment(string Imie, string Nazwisko, int zdolnoscNaukowca) {
- this->imie = Imie;
- this->nazwisko = Nazwisko;
- this->zdolnoscNaukowca = zdolnoscNaukowca;
- this->after = nullptr;
- }
- class Kolejka{
- private:
- int maxZdolnoscNaukowca;
- int minZdolnoscNaukowca;
- int ileMax;
- int ileMin;
- double srednia1;
- void maxNowy();
- void minNowy();
- public:
- Kolejka(int minZdolnoscNaukowca, int maxZdolnoscNaukowca, double srednia1, int ileMax, int ileMin);
- Eksperyment *first = nullptr;
- Eksperyment *last = nullptr;
- unsigned counter = 0;
- void push(string Imie, string Nazwisko, int zdolnoscNaukowca);
- void show();
- void pop();
- unsigned size();
- int getMax();
- int getMin();
- int getileMax();
- int getileMin();
- double getsrednia1();
- double srednia1Nowa();
- };
- Kolejka::Kolejka(int min, int max, double srednia, int ilemax, int ilemin) {
- minZdolnoscNaukowca = min;
- maxZdolnoscNaukowca = max;
- srednia1 = srednia;
- ileMin = ilemin;
- ileMax = ilemax;
- }
- void Kolejka::maxNowy() {
- Eksperyment *temp = this->first;
- int max=0;
- while(temp!= nullptr){
- if(temp->zdolnoscNaukowca>max){
- max=temp->zdolnoscNaukowca;
- }
- temp = temp->after;
- }
- maxZdolnoscNaukowca=max;
- }
- void Kolejka::minNowy() {
- Eksperyment *temp = this->first;
- int min=1001;
- while(temp!= nullptr){
- if(temp->zdolnoscNaukowca<min){
- min=temp->zdolnoscNaukowca;
- }
- temp = temp->after;
- }
- minZdolnoscNaukowca = min;
- }
- double Kolejka::srednia1Nowa(){
- Eksperyment *temp = this->first;
- int counter=0;
- srednia1=0;
- while(temp!= nullptr){
- srednia1+= temp->zdolnoscNaukowca;
- counter++;
- temp = temp->after;
- }
- srednia1=srednia1/counter;
- return srednia1;
- }
- void Kolejka::push(string Imie, string Nazwisko, int zdolnoscNaukowca) {
- Eksperyment *nowyEksperyment = new Eksperyment(Imie, Nazwisko, zdolnoscNaukowca);
- if(this->first == nullptr || this->last == nullptr){
- this->first = this->last = nowyEksperyment;
- }else{
- this->last->after = nowyEksperyment;
- this->last = nowyEksperyment;
- }
- if(zdolnoscNaukowca==minZdolnoscNaukowca){
- ileMin++;
- }
- if(zdolnoscNaukowca==maxZdolnoscNaukowca){
- ileMax++;
- }
- if(zdolnoscNaukowca<minZdolnoscNaukowca){
- minZdolnoscNaukowca=zdolnoscNaukowca;
- ileMin=0;
- }
- if(zdolnoscNaukowca>maxZdolnoscNaukowca){
- maxZdolnoscNaukowca=zdolnoscNaukowca;
- ileMax=0;
- }
- counter++;
- }
- void Kolejka::show() {
- Eksperyment *temp = this->first;
- while(temp!= nullptr){
- cout << temp->imie << " " << temp->nazwisko <<"\n";
- temp = temp->after;
- }
- }
- void Kolejka::pop() {
- int tempZdolnoscNaukowa = 0;
- if (this->first != nullptr) {
- Eksperyment *temp = this->first;
- this->first = this->first->after;
- tempZdolnoscNaukowa = temp->zdolnoscNaukowca;
- }counter--;
- if(tempZdolnoscNaukowa==maxZdolnoscNaukowca && ileMax==0){
- maxNowy();
- }else if(tempZdolnoscNaukowa==maxZdolnoscNaukowca && ileMax>0){
- ileMax--;
- }
- if(tempZdolnoscNaukowa==minZdolnoscNaukowca && ileMin==0){
- minNowy();
- }else if(tempZdolnoscNaukowa==minZdolnoscNaukowca && ileMin>0){
- ileMin--;
- }
- }
- unsigned Kolejka::size() {
- return counter;
- }
- int Kolejka::getMax() {
- return maxZdolnoscNaukowca;
- }
- int Kolejka::getMin() {
- return minZdolnoscNaukowca;
- }
- int Kolejka::getileMax() {
- return ileMax;
- }
- int Kolejka::getileMin() {
- return ileMin;
- }
- double Kolejka::getsrednia1() {
- return srednia1;
- }
- int main() {
- ios_base::sync_with_stdio(false);
- auto *k = new Kolejka(1001,0,0,0,0);
- auto *k2 = new Kolejka(1001,0,0,0,0);
- Eksperyment *temp, *temp2;
- int iloscNaukowcow, maksymalnaRoznicaZdolnosci, zdolnoscNaukowca;
- string imie, nazwisko;
- cin >> iloscNaukowcow >> maksymalnaRoznicaZdolnosci;
- for (int i = 0; i < iloscNaukowcow/2; ++i) {
- cin >> imie >> nazwisko >> zdolnoscNaukowca;
- k->push(imie, nazwisko, zdolnoscNaukowca);
- }
- k->srednia1Nowa();
- for (int i = 0; i < iloscNaukowcow/2; ++i) {
- cin >> imie >> nazwisko >> zdolnoscNaukowca;
- k2->push(imie, nazwisko, zdolnoscNaukowca);
- }
- k2->srednia1Nowa();
- int roznicaK1 = k->getMax() - k->getMin();
- int roznicaK2 = k2->getMax() - k2->getMin();
- int noweI=0;
- int noweI2=0;
- double najnizszaRoznicaSrednich=1001;
- for (int i = 1; i <= iloscNaukowcow/2; ++i){
- if(k->getsrednia1()- k2->getsrednia1() ==0) {
- k->show();
- cout<<"\n";
- k2->show();
- return 0;
- }
- if(najnizszaRoznicaSrednich>abs(k->getsrednia1()- k2->getsrednia1()) && (k->getMax() - k->getMin())<=maksymalnaRoznicaZdolnosci && (k2->getMax() - k2->getMin())<=maksymalnaRoznicaZdolnosci) {
- najnizszaRoznicaSrednich = abs(k->getsrednia1()- k2->getsrednia1());
- noweI2=i;
- }
- temp = k->first;
- temp2 = k2->first;
- k2->push(temp->imie,temp->nazwisko,temp->zdolnoscNaukowca);
- k->push(temp2->imie,temp2->nazwisko,temp2->zdolnoscNaukowca);
- k2->pop();
- k->pop();
- if(roznicaK1+roznicaK2 > (k->getMax() - k->getMin())+(k2->getMax() - k2->getMin())){
- roznicaK1 = k->getMax() - k->getMin();
- roznicaK2 = k2->getMax() - k2->getMin();
- noweI=i;
- }
- k->srednia1Nowa();
- k2->srednia1Nowa();
- }
- if(roznicaK1>maksymalnaRoznicaZdolnosci || roznicaK2>maksymalnaRoznicaZdolnosci){
- cout<<"NIE";
- return 0;
- }
- if(noweI2<noweI) {
- for (int i = 0; i < iloscNaukowcow / 2 + noweI2; i++) {
- temp = k->first;
- temp2 = k2->first;
- k2->push(temp->imie, temp->nazwisko, temp->zdolnoscNaukowca);
- k->push(temp2->imie, temp2->nazwisko, temp2->zdolnoscNaukowca);
- k2->pop();
- k->pop();
- }
- }
- for (int i = 0; i < noweI; i++) {
- temp = k2->first;
- k->push(temp->imie, temp->nazwisko, temp->zdolnoscNaukowca);
- k2->pop();
- }
- k2->show();
- for (int i = 0; i < noweI; i++) {
- temp = k->first;
- cout << temp->imie << " " << temp->nazwisko << "\n";
- k->pop();
- }
- cout << "\n";
- k->show();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement