Advertisement
Chmiel7PL

alg2

Nov 18th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.22 KB | None | 0 0
  1. #include<algorithm>
  2. #include <iostream>
  3. #include <string>
  4. #include<cmath>
  5.  
  6.  
  7.  
  8. struct Osoba {
  9. public:
  10.     std::string nazwisko;
  11.     long int minutes = 0;
  12.  
  13.  
  14.  
  15. };
  16.  
  17. int main()
  18. {
  19.  std::ios::sync_with_stdio(false);
  20.  
  21.     long int t = 0; //liczba zestawóów danych
  22.     long int n = 0; //liczba nazwisk
  23.     long int p = 0; //liczba nazwisk któe trzeba wyświetlić
  24.  
  25.     std::cin >> t;
  26.  
  27.     //wczytywanie
  28.     for (long int i = 0; i < t; i++) {
  29.  
  30.  
  31.  
  32.  
  33.         std::cin >> n;  //***PROCEDURA WCZYTYWANIA DANYCH POCZĄTKOWYCH***
  34.         std::cin >> p;
  35.  
  36.         if (p > n)break;
  37.  
  38.         Osoba* nowy = new Osoba[n];
  39.         //wczytywanie nazwisk i czasów
  40.         for (long int q = 0; q < n; q++) {
  41.             std::cin >> nowy[q].nazwisko >> nowy[q].minutes;
  42.  
  43.         }
  44.         long int wynik = 0;
  45.         long int zgodzilisie = 0;//ile osob sie zgodzilo
  46.  
  47.  
  48.             //sortowanie wybieranie
  49.         Osoba tmp_minutes;
  50.         Osoba tmp_nazwisko;
  51.         for (long int i = 1; i < n; i++) {
  52.  
  53.             if (nowy[i - 1].minutes > nowy[i].minutes)
  54.                 tmp_minutes = nowy[i];                                          //wybieram sobie mniejszy element tablicy i zapisuję go do zmiennej tymczasowej żeby sobie go potem móc podmienić w odpowienim miejscu
  55.             for (long int j = i - 1; j >= 0 && nowy[j].minutes > tmp_minutes.minutes; j--) {//ta pętla zapewnia mi, że mniejszy element zostanie wciśnięty w odpowiednie miejsce
  56.  
  57.                 if (nowy[j].minutes == nowy[j+1].minutes && nowy[j].nazwisko < nowy[j+1].nazwisko)std::swap(nowy[j], nowy[j+1]);
  58.                 if (nowy[j].minutes > nowy[j + 1].minutes) {
  59.                     tmp_minutes = nowy[j + 1];
  60.                     nowy[j + 1] = nowy[j];                                          //tutaj robię podmianę żeby kolejnośc była wg liczby minut
  61.                     nowy[j] = tmp_minutes;
  62.  
  63.  
  64.  
  65.                     if (nowy[j].minutes == nowy[j - 1].minutes && nowy[j].nazwisko > nowy[j - 1].nazwisko) {
  66.  
  67.                         std::swap(nowy[j], nowy[j - 1]);
  68.                     }
  69.                    
  70.                    
  71.                 }
  72.                
  73.             }
  74.  
  75.  
  76.  
  77.  
  78.         }
  79.         //if (nowy[n - 1].minutes == nowy[n - 2].minutes && nowy[n - 1].nazwisko > nowy[n - 2].nazwisko)std::swap(nowy[n-1], nowy[n - 2]);
  80.  
  81.         //wypisanie odpowiedniej ilosci nazwisk
  82.  
  83.         for (long int i = n - 1; i >= n - p; i--) {
  84.            
  85.             std::cout << nowy[i].nazwisko << " ";
  86.  
  87.  
  88.         }
  89.         //wypisanie wyniku i eluwa
  90.         for (long int i = n - 1; i >= 0; i--) {
  91.  
  92.             wynik += 1 + (nowy[i].minutes * zgodzilisie);
  93.  
  94.             zgodzilisie++;
  95.         }
  96.  
  97.         std::cout << std::endl << wynik%1000003 << std::endl;
  98.  
  99.  
  100.         delete[] nowy;
  101.  
  102.  
  103.     }
  104.  
  105.  
  106.     return 0;
  107. }
  108.  
  109. //*******************WYCIETE KODY*********************
  110.  
  111. //-----------------sortowanie jeśli pierwsza litera jest pozniej w alfabecie to jest podmianka-------------------
  112.                 //if (nowy[j].minutes == nowy[j - 1].minutes && nowy[j].nazwisko < nowy[j - 1].nazwisko) {
  113.             //
  114.                 //  std::swap(nowy[j], nowy[j - 1]);
  115.                 //}//----------------------tutaj sobie rypirympi jeśli litery są takie same wtedy przeglądam kolejno litery nazwiska i szukam wcześniejszej. wtedy dokonuje zamiany i przrywam pętlę
  116.                 //long int dl = nowy[j].nazwisko.length();
  117.                 //if (nowy[j].minutes == nowy[j - 1].minutes && nowy[j].nazwisko[0] == nowy[j - 1].nazwisko[0]) {
  118.                 //  for (long int literka = 0; literka < dl; literka++) {
  119.                 //      if (nowy[j].nazwisko[literka] < nowy[j - 1].nazwisko[literka]) {
  120.                 //          std::swap(nowy[j], nowy[j - 1]);
  121.                 // 
  122.                 //      break;
  123.                 //      }
  124.                 //  }
  125.                 //
  126.                 //}
  127.                 //
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement