SHARE
TWEET

Untitled

a guest Nov 19th, 2019 81 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. class Eksperyment{
  7. public:
  8.     string imie,nazwisko;
  9.     int zdolnoscNaukowca;
  10.     Eksperyment *after= nullptr;
  11.     Eksperyment(string,string,int);
  12. };
  13.  
  14. Eksperyment::Eksperyment(string Imie, string Nazwisko, int zdolnoscNaukowca) {
  15.     this->imie = Imie;
  16.     this->nazwisko = Nazwisko;
  17.     this->zdolnoscNaukowca = zdolnoscNaukowca;
  18.     this->after = nullptr;
  19. }
  20.  
  21. class Kolejka{
  22. private:
  23.     int maxZdolnoscNaukowca;
  24.     int minZdolnoscNaukowca;
  25.     int ileMax;
  26.     int ileMin;
  27.     double srednia1;
  28.     void maxNowy();
  29.     void minNowy();
  30. public:
  31.     Kolejka(int minZdolnoscNaukowca, int maxZdolnoscNaukowca, double srednia1, int ileMax, int ileMin);
  32.     Eksperyment *first = nullptr;
  33.     Eksperyment *last = nullptr;
  34.     unsigned counter = 0;
  35.  
  36.     void push(string Imie, string Nazwisko, int zdolnoscNaukowca);
  37.     void show();
  38.     void pop();
  39.     unsigned size();
  40.     int getMax();
  41.     int getMin();
  42.     int getileMax();
  43.     int getileMin();
  44.     double getsrednia1();
  45.     double srednia1Nowa();
  46. };
  47.  
  48. Kolejka::Kolejka(int min, int max, double srednia, int ilemax, int ilemin) {
  49.     minZdolnoscNaukowca = min;
  50.     maxZdolnoscNaukowca = max;
  51.     srednia1 = srednia;
  52.     ileMin = ilemin;
  53.     ileMax = ilemax;
  54. }
  55.  
  56. void Kolejka::maxNowy() {
  57.     Eksperyment *temp = this->first;
  58.     int max=0;
  59.     while(temp!= nullptr){
  60.         if(temp->zdolnoscNaukowca>max){
  61.             max=temp->zdolnoscNaukowca;
  62.         }
  63.         temp = temp->after;
  64.     }
  65.     maxZdolnoscNaukowca=max;
  66. }
  67.  
  68. void Kolejka::minNowy() {
  69.     Eksperyment *temp = this->first;
  70.     int min=1001;
  71.     while(temp!= nullptr){
  72.         if(temp->zdolnoscNaukowca<min){
  73.             min=temp->zdolnoscNaukowca;
  74.         }
  75.         temp = temp->after;
  76.     }
  77.     minZdolnoscNaukowca = min;
  78. }
  79.  
  80. double Kolejka::srednia1Nowa(){
  81.     Eksperyment *temp = this->first;
  82.     int counter=0;
  83.     srednia1=0;
  84.     while(temp!= nullptr){
  85.         srednia1+= temp->zdolnoscNaukowca;
  86.         counter++;
  87.         temp = temp->after;
  88.     }
  89.     srednia1=srednia1/counter;
  90.     return srednia1;
  91. }
  92.  
  93. void Kolejka::push(string Imie, string Nazwisko, int zdolnoscNaukowca) {
  94.     Eksperyment *nowyEksperyment = new Eksperyment(Imie, Nazwisko, zdolnoscNaukowca);
  95.     if(this->first == nullptr || this->last == nullptr){
  96.         this->first = this->last = nowyEksperyment;
  97.     }else{
  98.         this->last->after = nowyEksperyment;
  99.         this->last = nowyEksperyment;
  100.     }
  101.  
  102.     if(zdolnoscNaukowca==minZdolnoscNaukowca){
  103.         ileMin++;
  104.     }
  105.     if(zdolnoscNaukowca==maxZdolnoscNaukowca){
  106.         ileMax++;
  107.     }
  108.  
  109.     if(zdolnoscNaukowca<minZdolnoscNaukowca){
  110.         minZdolnoscNaukowca=zdolnoscNaukowca;
  111.         ileMin=0;
  112.     }
  113.     if(zdolnoscNaukowca>maxZdolnoscNaukowca){
  114.         maxZdolnoscNaukowca=zdolnoscNaukowca;
  115.         ileMax=0;
  116.     }
  117.     counter++;
  118. }
  119.  
  120. void Kolejka::show() {
  121.     Eksperyment *temp = this->first;
  122.     while(temp!= nullptr){
  123.         cout << temp->imie << " " << temp->nazwisko <<"\n";
  124.         temp = temp->after;
  125.     }
  126. }
  127.  
  128. void Kolejka::pop() {
  129.     int tempZdolnoscNaukowa = 0;
  130.     if (this->first != nullptr) {
  131.         Eksperyment *temp = this->first;
  132.         this->first = this->first->after;
  133.         tempZdolnoscNaukowa = temp->zdolnoscNaukowca;
  134.     }counter--;
  135.     if(tempZdolnoscNaukowa==maxZdolnoscNaukowca && ileMax==0){
  136.         maxNowy();
  137.     }else if(tempZdolnoscNaukowa==maxZdolnoscNaukowca && ileMax>0){
  138.         ileMax--;
  139.     }
  140.     if(tempZdolnoscNaukowa==minZdolnoscNaukowca && ileMin==0){
  141.         minNowy();
  142.     }else if(tempZdolnoscNaukowa==minZdolnoscNaukowca && ileMin>0){
  143.         ileMin--;
  144.     }
  145. }
  146.  
  147. unsigned Kolejka::size() {
  148.     return counter;
  149. }
  150.  
  151. int Kolejka::getMax() {
  152.     return maxZdolnoscNaukowca;
  153. }
  154.  
  155. int Kolejka::getMin() {
  156.     return minZdolnoscNaukowca;
  157. }
  158.  
  159. int Kolejka::getileMax() {
  160.     return ileMax;
  161. }
  162.  
  163. int Kolejka::getileMin() {
  164.     return ileMin;
  165. }
  166.  
  167. double Kolejka::getsrednia1() {
  168.     return srednia1;
  169. }
  170.  
  171. int main() {
  172.     ios_base::sync_with_stdio(false);
  173.  
  174.     auto *k = new Kolejka(1001,0,0,0,0);
  175.     auto *k2 = new Kolejka(1001,0,0,0,0);
  176.     Eksperyment *temp, *temp2;
  177.     int iloscNaukowcow, maksymalnaRoznicaZdolnosci, zdolnoscNaukowca;
  178.     string imie, nazwisko;
  179.  
  180.     cin >> iloscNaukowcow >> maksymalnaRoznicaZdolnosci;
  181.     for (int i = 0; i < iloscNaukowcow/2; ++i) {
  182.         cin >> imie >> nazwisko >> zdolnoscNaukowca;
  183.         k->push(imie, nazwisko, zdolnoscNaukowca);
  184.     }
  185.     k->srednia1Nowa();
  186.     for (int i = 0; i < iloscNaukowcow/2; ++i) {
  187.         cin >> imie >> nazwisko >> zdolnoscNaukowca;
  188.         k2->push(imie, nazwisko, zdolnoscNaukowca);
  189.     }
  190.     k2->srednia1Nowa();
  191.  
  192.     int roznicaK1 = k->getMax() - k->getMin();
  193.     int roznicaK2 = k2->getMax() - k2->getMin();
  194.     int noweI=0;
  195.     int noweI2=0;
  196.     double najnizszaRoznicaSrednich=1001;
  197.  
  198.  
  199.     for (int i = 1; i <= iloscNaukowcow/2; ++i){
  200.         if(k->getsrednia1()- k2->getsrednia1() ==0) {
  201.             k->show();
  202.             cout<<"\n";
  203.             k2->show();
  204.             return 0;
  205.         }
  206.        if(najnizszaRoznicaSrednich>abs(k->getsrednia1()- k2->getsrednia1()) && (k->getMax() - k->getMin())<=maksymalnaRoznicaZdolnosci && (k2->getMax() - k2->getMin())<=maksymalnaRoznicaZdolnosci) {
  207.            najnizszaRoznicaSrednich = abs(k->getsrednia1()- k2->getsrednia1());
  208.            noweI2=i;
  209.        }
  210.         temp = k->first;
  211.         temp2 = k2->first;
  212.         k2->push(temp->imie,temp->nazwisko,temp->zdolnoscNaukowca);
  213.         k->push(temp2->imie,temp2->nazwisko,temp2->zdolnoscNaukowca);
  214.         k2->pop();
  215.         k->pop();
  216.         if(roznicaK1+roznicaK2 > (k->getMax() - k->getMin())+(k2->getMax() - k2->getMin())){
  217.             roznicaK1 = k->getMax() - k->getMin();
  218.             roznicaK2 = k2->getMax() - k2->getMin();
  219.             noweI=i;
  220.         }
  221.        k->srednia1Nowa();
  222.        k2->srednia1Nowa();
  223.     }
  224.  
  225.     if(roznicaK1>maksymalnaRoznicaZdolnosci || roznicaK2>maksymalnaRoznicaZdolnosci){
  226.         cout<<"NIE";
  227.         return 0;
  228.     }
  229.  
  230.     if(noweI2<noweI) {
  231.         for (int i = 0; i < iloscNaukowcow / 2 + noweI2; i++) {
  232.             temp = k->first;
  233.             temp2 = k2->first;
  234.             k2->push(temp->imie, temp->nazwisko, temp->zdolnoscNaukowca);
  235.             k->push(temp2->imie, temp2->nazwisko, temp2->zdolnoscNaukowca);
  236.             k2->pop();
  237.             k->pop();
  238.         }
  239.     }
  240.  
  241.  
  242.     for (int i = 0; i < noweI; i++) {
  243.         temp = k2->first;
  244.         k->push(temp->imie, temp->nazwisko, temp->zdolnoscNaukowca);
  245.         k2->pop();
  246.     }
  247.     k2->show();
  248.     for (int i = 0; i < noweI; i++) {
  249.         temp = k->first;
  250.         cout << temp->imie << " " << temp->nazwisko << "\n";
  251.         k->pop();
  252.     }
  253.     cout << "\n";
  254.     k->show();
  255.  
  256.     return 0;
  257. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top