Advertisement
Guest User

Untitled

a guest
Dec 17th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. struct SOsoba
  8. {
  9.     int liczba_kjwiatkow , numer;
  10. };
  11.  
  12. struct PorownajOsoby
  13. {
  14.     bool operator ()( const SOsoba & osoba1, const SOsoba & osoba2 )
  15.     {
  16.         if( osoba1.liczba_kjwiatkow < osoba2.liczba_kjwiatkow ) return true;
  17.         if( osoba1.liczba_kjwiatkow > osoba2.liczba_kjwiatkow ) return false;
  18.         if( osoba1.numer > osoba2.numer ) return true;
  19.         if( osoba1.numer < osoba2.numer ) return false;
  20.         return false;
  21.     }
  22. };
  23.  
  24. typedef priority_queue < SOsoba,vector < SOsoba >, PorownajOsoby > TKolejkaPriorytetowaOsob;
  25.  
  26. void WstawOsobe( TKolejkaPriorytetowaOsob & kp, int imie,int kolejnosc)
  27. {
  28.     SOsoba nowaOsoba;
  29.     nowaOsoba.liczba_kjwiatkow = imie;
  30.     nowaOsoba.numer = kolejnosc;
  31.     kp.push( nowaOsoba );
  32. }
  33.  
  34. int main()
  35. {
  36.     int pom,pom2,pom3,pom4;
  37.     int r,w,liczba_kwiatkow,maks_pom=0,a=0;
  38.     double polowa,pomm;
  39.  
  40.     cin >> r;
  41.  
  42.     for(int i = 0 ; i < r ; i++)
  43.     {
  44.         TKolejkaPriorytetowaOsob kolejkaPriorytetowa;
  45.         SOsoba odczytana,pomocnik;
  46.         a = 0;
  47.         maks_pom = 0;
  48.         cin >> w;
  49.         for(int j = 0 ; j < w ; j++)
  50.         {
  51.             cin >> liczba_kwiatkow;
  52.             a+=liczba_kwiatkow;
  53.             if(liczba_kwiatkow > maks_pom)
  54.             {
  55.                 maks_pom = liczba_kwiatkow;
  56.             }
  57.             WstawOsobe( kolejkaPriorytetowa,liczba_kwiatkow,j);
  58.         }
  59.  
  60.         pomm = (double)a/2;
  61.  
  62.         polowa = ceil(pomm);
  63.  
  64.         if(maks_pom > polowa)
  65.         {
  66.             cout << "NIE" << endl;
  67.             continue;
  68.         }
  69.  
  70.             if(a % 2 == 0)
  71.             {
  72.                 odczytana = kolejkaPriorytetowa.top();
  73.                 pom = odczytana.liczba_kjwiatkow;
  74.                 pom--;
  75.                 pom2 = odczytana.numer;
  76.                 cout << pom2 << " ";
  77.                 kolejkaPriorytetowa.pop();
  78.  
  79.                 pomocnik = kolejkaPriorytetowa.top();
  80.                 pom3 = pomocnik.liczba_kjwiatkow;
  81.                 pom3--;
  82.                 pom4 = pomocnik.numer;
  83.                 cout << pom4 << " ";
  84.                 kolejkaPriorytetowa.pop();
  85.                 if(pom > 0)
  86.                 {
  87.                     WstawOsobe( kolejkaPriorytetowa,pom,pom2);
  88.                 }
  89.  
  90.                 for(int j = 1 ; j < a/2 ; j++)
  91.                 {
  92.                     if(pom3 > 0)
  93.                     {
  94.                         WstawOsobe( kolejkaPriorytetowa,pom3,pom4);
  95.                     }
  96.                     odczytana = kolejkaPriorytetowa.top();
  97.                     pom = odczytana.liczba_kjwiatkow;
  98.                     pom--;
  99.                     pom2 = odczytana.numer;
  100.                     cout << pom2 << " ";
  101.                     kolejkaPriorytetowa.pop();
  102.  
  103.                     pomocnik = kolejkaPriorytetowa.top();
  104.                     pom3 = pomocnik.liczba_kjwiatkow;
  105.                     pom3--;
  106.                     pom4 = pomocnik.numer;
  107.                     cout << pom4 << " ";
  108.                     kolejkaPriorytetowa.pop();
  109.                     if(pom > 0)
  110.                     {
  111.                         WstawOsobe( kolejkaPriorytetowa,pom,pom2);
  112.                     }
  113.                 }
  114.                     cout << endl;
  115.             }
  116.             else
  117.             {
  118.                 odczytana = kolejkaPriorytetowa.top();
  119.                 pom = odczytana.liczba_kjwiatkow;
  120.                 pom--;
  121.                 pom2 = odczytana.numer;
  122.                 cout << pom2 << " ";
  123.                 kolejkaPriorytetowa.pop();
  124.  
  125.                 pomocnik = kolejkaPriorytetowa.top();
  126.                 pom3 = pomocnik.liczba_kjwiatkow;
  127.                 pom3--;
  128.                 pom4 = pomocnik.numer;
  129.                 cout << pom4 << " ";
  130.                 kolejkaPriorytetowa.pop();
  131.                 if(pom > 0)
  132.                 {
  133.                     WstawOsobe( kolejkaPriorytetowa,pom,pom2);
  134.                 }
  135.  
  136.                 for(int j = 1 ; j < a/2+1 ; j++)
  137.                 {
  138.                     if(j < a/2)
  139.                     {
  140.                     if(pom3 > 0)
  141.                     {
  142.                         WstawOsobe( kolejkaPriorytetowa,pom3,pom4);
  143.                     }
  144.                     odczytana = kolejkaPriorytetowa.top();
  145.                     pom = odczytana.liczba_kjwiatkow;
  146.                     pom--;
  147.                     pom2 = odczytana.numer;
  148.                     cout << pom2 << " ";
  149.                     kolejkaPriorytetowa.pop();
  150.  
  151.                     pomocnik = kolejkaPriorytetowa.top();
  152.                     pom3 = pomocnik.liczba_kjwiatkow;
  153.                     pom3--;
  154.                     pom4 = pomocnik.numer;
  155.                     cout << pom4 << " ";
  156.                     kolejkaPriorytetowa.pop();
  157.                     if(pom > 0)
  158.                     {
  159.                         WstawOsobe( kolejkaPriorytetowa,pom,pom2);
  160.                     }
  161.                     }
  162.                     else
  163.                     {
  164.                         if(pom3 > 0)
  165.                     {
  166.                         WstawOsobe( kolejkaPriorytetowa,pom3,pom4);
  167.                     }
  168.                     odczytana = kolejkaPriorytetowa.top();
  169.                     pom = odczytana.liczba_kjwiatkow;
  170.                     pom--;
  171.                     pom2 = odczytana.numer;
  172.                     cout << pom2 << " ";
  173.                     kolejkaPriorytetowa.pop();
  174.                     }
  175.                 }
  176.                 cout << endl;
  177.             }
  178. }
  179.  
  180.     return 0;
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement