#include<iostream>
using namespace std;
int n;
int partition(int tablica[], int p, int r) // dzielimy tablice na dwie czesci, w pierwszej wszystkie liczby sa mniejsze badz rowne x, w drugiej wieksze lub rowne od x
{
int x = tablica[p]; // obieramy x
int i = p, j = r, w; // i, j - indeksy w tabeli
while (true) // petla nieskonczona - wychodzimy z niej tylko przez return j
{
while (tablica[j] > x) // dopoki elementy sa wieksze od x
j--;
while (tablica[i] < x) // dopoki elementy sa mniejsze od x
i++;
if (i < j) // zamieniamy miejscami gdy i < j
{
w = tablica[i];
tablica[i] = tablica[j];
tablica[j] = w;
i++;
j--;
}
else // gdy i >= j zwracamy j jako punkt podzialu tablicy
return j;
}
}
void quicksort(int tablica[], int p, int r) // sortowanie szybkie
{
int q;
if (p < r)
{
q = partition(tablica, p, r); // dzielimy tablice na dwie czesci; q oznacza punkt podzialu
quicksort(tablica, p, q); // wywolujemy rekurencyjnie quicksort dla pierwszej czesci tablicy
quicksort(tablica, q + 1, r); // wywolujemy rekurencyjnie quicksort dla drugiej czesci tablicy
}
}
int main()
{
cin >> n;
int * tablica = new int [n];
for (int i = 0; i < n; i++)
{
cin >> tablica[i];
}
quicksort(tablica, 0, n - 1);
if (tablica[0] == 1 && tablica[1] == 1)
{
cout << "0" << endl;
cout << "2" << endl;
cout << "1"; cout << " "; cout << "2";
}
else if (tablica[0] == 1)
{
cout << "1" << endl;
cout << "2" << endl;
cout << "1"; cout << " "; cout << "2";
}
else
{
cout << "2" << endl;
cout << "2" << endl;
cout << "1"; cout << " "; cout << "2";
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #include<iostream> using namespace std; int n; int partition(int tablica[], int p, int r) // dzielimy tablice na dwie czesci, w pierwszej wszystkie liczby sa mniejsze badz rowne x, w drugiej wieksze lub rowne od x { int x = tablica[p]; // obieramy x int i = p, j = r, w; // i, j - indeksy w tabeli while (true) // petla nieskonczona - wychodzimy z niej tylko przez return j { while (tablica[j] > x) // dopoki elementy sa wieksze od x j--; while (tablica[i] < x) // dopoki elementy sa mniejsze od x i++; if (i < j) // zamieniamy miejscami gdy i < j { w = tablica[i]; tablica[i] = tablica[j]; tablica[j] = w; i++; j--; } else // gdy i >= j zwracamy j jako punkt podzialu tablicy return j; } } void quicksort(int tablica[], int p, int r) // sortowanie szybkie { int q; if (p < r) { q = partition(tablica, p, r); // dzielimy tablice na dwie czesci; q oznacza punkt podzialu quicksort(tablica, p, q); // wywolujemy rekurencyjnie quicksort dla pierwszej czesci tablicy quicksort(tablica, q + 1, r); // wywolujemy rekurencyjnie quicksort dla drugiej czesci tablicy } } int main() { cin >> n; int * tablica = new int [n]; for (int i = 0; i < n; i++) { cin >> tablica[i]; } quicksort(tablica, 0, n - 1); if (tablica[0] == 1 && tablica[1] == 1) { cout << "0" << endl; cout << "2" << endl; cout << "1"; cout << " "; cout << "2"; } else if (tablica[0] == 1) { cout << "1" << endl; cout << "2" << endl; cout << "1"; cout << " "; cout << "2"; } else { cout << "2" << endl; cout << "2" << endl; cout << "1"; cout << " "; cout << "2"; } } |
English