#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) << ' '; } } |
polski