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