#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
int a[100'009][3];
ll odp[11];
ll zaj[109][2];
int n,k;
void dfs(int x, int y, int l, int r){
if (a[x][1-y] >= l && a[x][1-y]<=r && zaj[x][1-y] != zaj[x][y]){
zaj[x][1-y] = zaj[x][y];
dfs(x,1-y,l,r);
}
if (a[(x+1)%n][y] >= l && a[(x+1)%n][y]<=r && zaj[(x+1)%n][y] != zaj[x][y]){
zaj[(x+1)%n][y] = zaj[x][y];
dfs((x+1)%n,y,l,r);
}
if (n>=3 && a[(x-1+n)%n][y] >= l && a[(x-1+n)%n][y]<=r && zaj[(x-1+n)%n][y] != zaj[x][y]){
zaj[(x-1+n)%n][y] = zaj[x][y];
dfs((x-1+n)%n,y,l,r);
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> k;
for (int x=0;x<n;x++){
cin >> a[x][0];
}
for (int x=0;x<n;x++){
cin >> a[x][1];
}
if (n<=100){
for (int l=1;l<=2*n;l++){
for (int r=l;r<=2*n;r++){
int jeden=l*2*n+r;
ll ciekawosc = 0;
for (int x=0;x<n;x++){
for (int y=0;y<2;y++){
if (a[x][y] > r || a[x][y] < l || zaj[x][y] == jeden){
continue;
}
zaj[x][y] = jeden;
dfs(x,y,l,r);
ciekawosc += 1;
}
}
if (ciekawosc<=k){
odp[ciekawosc] += 1;
}
}
}
for (int x=1;x<=k;x++){
cout << odp[x] << ' ';
}
}
return 0;
}
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 | #include <bits/stdc++.h> using namespace std; typedef long long int ll; int a[100'009][3]; ll odp[11]; ll zaj[109][2]; int n,k; void dfs(int x, int y, int l, int r){ if (a[x][1-y] >= l && a[x][1-y]<=r && zaj[x][1-y] != zaj[x][y]){ zaj[x][1-y] = zaj[x][y]; dfs(x,1-y,l,r); } if (a[(x+1)%n][y] >= l && a[(x+1)%n][y]<=r && zaj[(x+1)%n][y] != zaj[x][y]){ zaj[(x+1)%n][y] = zaj[x][y]; dfs((x+1)%n,y,l,r); } if (n>=3 && a[(x-1+n)%n][y] >= l && a[(x-1+n)%n][y]<=r && zaj[(x-1+n)%n][y] != zaj[x][y]){ zaj[(x-1+n)%n][y] = zaj[x][y]; dfs((x-1+n)%n,y,l,r); } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k; for (int x=0;x<n;x++){ cin >> a[x][0]; } for (int x=0;x<n;x++){ cin >> a[x][1]; } if (n<=100){ for (int l=1;l<=2*n;l++){ for (int r=l;r<=2*n;r++){ int jeden=l*2*n+r; ll ciekawosc = 0; for (int x=0;x<n;x++){ for (int y=0;y<2;y++){ if (a[x][y] > r || a[x][y] < l || zaj[x][y] == jeden){ continue; } zaj[x][y] = jeden; dfs(x,y,l,r); ciekawosc += 1; } } if (ciekawosc<=k){ odp[ciekawosc] += 1; } } } for (int x=1;x<=k;x++){ cout << odp[x] << ' '; } } return 0; } |
English