#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"; } } |