#include <iostream> #include <algorithm> #include <vector> using namespace std; void znajdz_obszar_tyl(int& pocz, int& kon, int& n, int wiersz, int kolumna, int**& obraz, bool**& obszar) { if (pocz <= obraz[wiersz][kolumna] && obraz[wiersz][kolumna] <= kon && !obszar[wiersz][kolumna]) { obszar[wiersz][kolumna] = true; } if (pocz <= obraz[wiersz][kolumna - 1] && obraz[wiersz][kolumna - 1] <= kon && !obszar[wiersz][kolumna - 1]) { znajdz_obszar_tyl(pocz, kon, n, wiersz, kolumna - 1, obraz, obszar); } if (wiersz == 0) wiersz = 1; else wiersz = 0; if (pocz <= obraz[wiersz][kolumna] && obraz[wiersz][kolumna] <= kon && !obszar[wiersz][kolumna]) { znajdz_obszar_tyl(pocz, kon, n, wiersz, kolumna, obraz, obszar); } } void znajdz_obszar(int &pocz, int &kon, int &n, int wiersz, int kolumna, int** &obraz, bool**& obszar) { if (pocz <= obraz[wiersz][kolumna] && obraz[wiersz][kolumna] <= kon && !obszar[wiersz][kolumna]) { obszar[wiersz][kolumna] = true; } if (kolumna == 0) { if (!obszar[wiersz][n - 1] && pocz <= obraz[wiersz][n - 1] && obraz[wiersz][n - 1] <= kon) znajdz_obszar_tyl(pocz, kon, n, wiersz, n-1, obraz, obszar); } if (kolumna == n-1) { if (!obszar[wiersz][0] && pocz <= obraz[wiersz][0] && obraz[wiersz][0] <= kon) obszar[wiersz][0] = true; } if (pocz <= obraz[wiersz][kolumna+1]&& obraz[wiersz][kolumna+1] <= kon && !obszar[wiersz][kolumna+1]) { znajdz_obszar(pocz, kon, n, wiersz, kolumna+1, obraz, obszar); } if (wiersz == 0) wiersz = 1; else wiersz = 0; if (pocz <= obraz[wiersz][kolumna] && obraz[wiersz][kolumna] <= kon && !obszar[wiersz][kolumna]) { obszar[wiersz][kolumna] = true; znajdz_obszar(pocz, kon, n, wiersz, kolumna, obraz, obszar); } } int ciekawosc_przedzialu(int pocz, int kon,int n, int k, int **obraz) { int ciekawosc = 0; bool** obszary = new bool*[2]; for (int i = 0; i < 2; i++) { obszary[i] = new bool[n]; fill(obszary[i], obszary[i] + n, false); } for (int i = 0; i < n; i++) { if (pocz <= obraz[0][i] && obraz[0][i] <= kon && !obszary[0][i]) { znajdz_obszar(pocz, kon, n, 0, i, obraz, obszary); ciekawosc++; } else if (pocz <= obraz[1][i] && obraz[1][i] <= kon && !obszary[1][i]) { znajdz_obszar(pocz, kon, n, 1, i, obraz, obszary); ciekawosc++; } if (ciekawosc > k) return k + 1; } return ciekawosc; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, k; cin >> n >> k; int** obraz = new int*[2]; for (int i = 0; i < 2; i++) { obraz[i] = new int[n]; } for (int i = 0; i < n; i++) { cin >> obraz[0][i]; } for (int i = 0; i < n; i++) { cin >> obraz[1][i]; } vector<int> ciekawosci; for (int pocz_przedzialu = 1; pocz_przedzialu <= 2 * n; pocz_przedzialu++) { for (int kon_przedzialu = pocz_przedzialu; kon_przedzialu <= 2 * n; kon_przedzialu++) { int ciekawosc = ciekawosc_przedzialu(pocz_przedzialu, kon_przedzialu, n,k, obraz); ciekawosci.push_back(ciekawosc); } } for (int i = 1; i <= k; i++) { cout << count(ciekawosci.begin(), ciekawosci.end(), i) << ' '; } }
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | #include <iostream> #include <algorithm> #include <vector> using namespace std; void znajdz_obszar_tyl(int& pocz, int& kon, int& n, int wiersz, int kolumna, int**& obraz, bool**& obszar) { if (pocz <= obraz[wiersz][kolumna] && obraz[wiersz][kolumna] <= kon && !obszar[wiersz][kolumna]) { obszar[wiersz][kolumna] = true; } if (pocz <= obraz[wiersz][kolumna - 1] && obraz[wiersz][kolumna - 1] <= kon && !obszar[wiersz][kolumna - 1]) { znajdz_obszar_tyl(pocz, kon, n, wiersz, kolumna - 1, obraz, obszar); } if (wiersz == 0) wiersz = 1; else wiersz = 0; if (pocz <= obraz[wiersz][kolumna] && obraz[wiersz][kolumna] <= kon && !obszar[wiersz][kolumna]) { znajdz_obszar_tyl(pocz, kon, n, wiersz, kolumna, obraz, obszar); } } void znajdz_obszar(int &pocz, int &kon, int &n, int wiersz, int kolumna, int** &obraz, bool**& obszar) { if (pocz <= obraz[wiersz][kolumna] && obraz[wiersz][kolumna] <= kon && !obszar[wiersz][kolumna]) { obszar[wiersz][kolumna] = true; } if (kolumna == 0) { if (!obszar[wiersz][n - 1] && pocz <= obraz[wiersz][n - 1] && obraz[wiersz][n - 1] <= kon) znajdz_obszar_tyl(pocz, kon, n, wiersz, n-1, obraz, obszar); } if (kolumna == n-1) { if (!obszar[wiersz][0] && pocz <= obraz[wiersz][0] && obraz[wiersz][0] <= kon) obszar[wiersz][0] = true; } if (pocz <= obraz[wiersz][kolumna+1]&& obraz[wiersz][kolumna+1] <= kon && !obszar[wiersz][kolumna+1]) { znajdz_obszar(pocz, kon, n, wiersz, kolumna+1, obraz, obszar); } if (wiersz == 0) wiersz = 1; else wiersz = 0; if (pocz <= obraz[wiersz][kolumna] && obraz[wiersz][kolumna] <= kon && !obszar[wiersz][kolumna]) { obszar[wiersz][kolumna] = true; znajdz_obszar(pocz, kon, n, wiersz, kolumna, obraz, obszar); } } int ciekawosc_przedzialu(int pocz, int kon,int n, int k, int **obraz) { int ciekawosc = 0; bool** obszary = new bool*[2]; for (int i = 0; i < 2; i++) { obszary[i] = new bool[n]; fill(obszary[i], obszary[i] + n, false); } for (int i = 0; i < n; i++) { if (pocz <= obraz[0][i] && obraz[0][i] <= kon && !obszary[0][i]) { znajdz_obszar(pocz, kon, n, 0, i, obraz, obszary); ciekawosc++; } else if (pocz <= obraz[1][i] && obraz[1][i] <= kon && !obszary[1][i]) { znajdz_obszar(pocz, kon, n, 1, i, obraz, obszary); ciekawosc++; } if (ciekawosc > k) return k + 1; } return ciekawosc; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, k; cin >> n >> k; int** obraz = new int*[2]; for (int i = 0; i < 2; i++) { obraz[i] = new int[n]; } for (int i = 0; i < n; i++) { cin >> obraz[0][i]; } for (int i = 0; i < n; i++) { cin >> obraz[1][i]; } vector<int> ciekawosci; for (int pocz_przedzialu = 1; pocz_przedzialu <= 2 * n; pocz_przedzialu++) { for (int kon_przedzialu = pocz_przedzialu; kon_przedzialu <= 2 * n; kon_przedzialu++) { int ciekawosc = ciekawosc_przedzialu(pocz_przedzialu, kon_przedzialu, n,k, obraz); ciekawosci.push_back(ciekawosc); } } for (int i = 1; i <= k; i++) { cout << count(ciekawosci.begin(), ciekawosci.end(), i) << ' '; } } |