Advertisement
MeehoweCK

Untitled

Dec 7th, 2020
727
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. short N = 10;
  7.  
  8. void sortuj(short* tab)
  9. {
  10.     for(short i = 0; i < N; ++i)
  11.         for(short j = 0; j < N - i - 1; ++j)
  12.             if(tab[j] < tab[j + 1])
  13.                 swap(tab[j], tab[j + 1]);
  14. }
  15.  
  16. bool trojkat(vector<short> kombo, short* tablica)
  17. {
  18.     if(tablica[kombo[0]] - tablica[kombo[1]] <= tablica[kombo[2]])
  19.         return true;
  20.     return false;
  21. }
  22.  
  23. bool kombinacja(vector<short>& nastepny, vector<short> poprzedni, short maksymalny)
  24. {
  25.     if(poprzedni[2] < maksymalny)
  26.     {
  27.         nastepny[0] = poprzedni[0];
  28.         nastepny[1] = poprzedni[1];
  29.         nastepny[2] = poprzedni[2] + 1;
  30.         return true;
  31.     }
  32.     if(poprzedni[1] < poprzedni[2] - 1)
  33.     {
  34.         nastepny[0] = poprzedni[0];
  35.         nastepny[1] = poprzedni[1] + 1;
  36.         nastepny[2] = nastepny[1] + 1;
  37.         if(nastepny[2] > maksymalny)
  38.             return false;
  39.         return true;
  40.     }
  41.     if(poprzedni[0] < poprzedni[1] - 1)
  42.     {
  43.         nastepny[0] = poprzedni[0] + 1;
  44.         nastepny[1] = nastepny[0] + 1;
  45.         nastepny[2] = nastepny[1] + 1;
  46.         if(nastepny[2] > maksymalny)
  47.             return false;
  48.         return true;
  49.     }
  50.     return false;
  51. }
  52.  
  53. vector<vector<short>> wszystkie_kombinacje(short min, short max)
  54. {
  55.     vector<short> kombo;
  56.     kombo.resize(3);
  57.     kombo[0] = min;
  58.     kombo[1] = min + 1;
  59.     kombo[2] = min + 2;
  60.     vector<short> nowy;
  61.     nowy.resize(3);
  62.  
  63.     vector<vector<short>> kombinacje;
  64.     kombinacje.push_back(kombo);
  65.     short i = 0;
  66.     while(kombinacja(nowy, kombinacje[i], max))
  67.     {
  68.         kombinacje.push_back(nowy);
  69.         ++i;
  70.     }
  71.     return kombinacje;
  72. }
  73.  
  74. bool czy_dziala(short min, short max, short* tablica)
  75. {
  76.     vector<vector<short>> kombinacje = wszystkie_kombinacje(min, max);
  77.     unsigned ile = kombinacje.size();
  78.  
  79.     for(unsigned i = 0; i < ile; ++i)
  80.         if(!trojkat(kombinacje[i], tablica))
  81.             return false;
  82.     return true;
  83. }
  84.  
  85. int main()
  86. {
  87.     cin >> N;
  88.     short tablica[N];
  89.     for(short i = 0; i < N; ++i)
  90.         cin >> tablica[i];
  91.     sortuj(tablica);
  92.  
  93.     short max = 0;
  94.  
  95.     for(short i = 0; i < N - 2; ++i)
  96.         for(short j = i + 2; j < N; ++j)
  97.         {
  98.             if(j - i + 1 <= max)
  99.                 continue;
  100.             if(czy_dziala(i, j, tablica))
  101.                 max = j - i + 1;
  102.         }
  103.  
  104.     cout << max;
  105.  
  106.     return 0;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement