#include <bits/stdc++.h>
#define MAX_N 100007
using namespace std;
int kol[MAX_N][2];
bool odw[MAX_N][2];
queue<pair<int, int>> q;
void bfs(int l, int r, int n){
int w, b;
while(!q.empty()){
w = q.front().first;
b = q.front().second;
if(w == 0){
if(!odw[n-1][b] && kol[n-1][b] >= l && kol[n-1][b] <= r){
odw[n-1][b] = 1;
q.push({n-1, b});
}
}else{
if(!odw[w-1][b] && kol[w-1][b] >= l && kol[w-1][b] <= r){
odw[w-1][b] = 1;
q.push({w-1, b});
}
}
if(w == n-1){
if(!odw[0][b] && kol[0][b] >= l && kol[0][b] <= r){
odw[0][b] = 1;
q.push({0, b});
}
}else{
if(!odw[w+1][b] && kol[w+1][b] >= l && kol[w+1][b] <= r){
odw[w+1][b] = 1;
q.push({w+1, b});
}
}
if(b){
if(!odw[w][0] && kol[w][0] >= l && kol[w][0] <= r){
odw[w][0] = 1;
q.push({w, 0});
}
}else{
if(!odw[w][1] && kol[w][1] >= l && kol[w][1] <= r){
odw[w][1] = 1;
q.push({w, 1});
}
}
q.pop();
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, k;
cin >> n >> k;
for(int i = 0; i < n; i++) cin >> kol[i][0];
for(int i = 0; i < n; i++) cin >> kol[i][1];
int wyniki[k+1];
for(int i = 1; i <= k; i++) wyniki[i] = 0;
int teraz;
wyniki[1] = 2*n;
for(int i = 1; i < 2*n; i++){
for(int j = i+1; j <= 2*n; j++){
teraz = 0;
for(int l = 0; l < n; l++){
if(kol[l][0] >= i && kol[l][0] <= j && !odw[l][0]){
teraz++;
if(teraz > k) break;
q.push({l, 0});
bfs(i, j, n);
}else if(kol[l][1] >= i && kol[l][1] <= j && !odw[l][1]){
teraz++;
if(teraz > k) break;
q.push({l, 1});
bfs(i, j, n);
}
}
if(teraz <= k) wyniki[teraz]++;
for(int l = 0; l < n; l++){
odw[l][0] = 0;
odw[l][1] = 0;
}
}
}
for(int i = 1; i <= k; i++) cout << wyniki[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 | #include <bits/stdc++.h> #define MAX_N 100007 using namespace std; int kol[MAX_N][2]; bool odw[MAX_N][2]; queue<pair<int, int>> q; void bfs(int l, int r, int n){ int w, b; while(!q.empty()){ w = q.front().first; b = q.front().second; if(w == 0){ if(!odw[n-1][b] && kol[n-1][b] >= l && kol[n-1][b] <= r){ odw[n-1][b] = 1; q.push({n-1, b}); } }else{ if(!odw[w-1][b] && kol[w-1][b] >= l && kol[w-1][b] <= r){ odw[w-1][b] = 1; q.push({w-1, b}); } } if(w == n-1){ if(!odw[0][b] && kol[0][b] >= l && kol[0][b] <= r){ odw[0][b] = 1; q.push({0, b}); } }else{ if(!odw[w+1][b] && kol[w+1][b] >= l && kol[w+1][b] <= r){ odw[w+1][b] = 1; q.push({w+1, b}); } } if(b){ if(!odw[w][0] && kol[w][0] >= l && kol[w][0] <= r){ odw[w][0] = 1; q.push({w, 0}); } }else{ if(!odw[w][1] && kol[w][1] >= l && kol[w][1] <= r){ odw[w][1] = 1; q.push({w, 1}); } } q.pop(); } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, k; cin >> n >> k; for(int i = 0; i < n; i++) cin >> kol[i][0]; for(int i = 0; i < n; i++) cin >> kol[i][1]; int wyniki[k+1]; for(int i = 1; i <= k; i++) wyniki[i] = 0; int teraz; wyniki[1] = 2*n; for(int i = 1; i < 2*n; i++){ for(int j = i+1; j <= 2*n; j++){ teraz = 0; for(int l = 0; l < n; l++){ if(kol[l][0] >= i && kol[l][0] <= j && !odw[l][0]){ teraz++; if(teraz > k) break; q.push({l, 0}); bfs(i, j, n); }else if(kol[l][1] >= i && kol[l][1] <= j && !odw[l][1]){ teraz++; if(teraz > k) break; q.push({l, 1}); bfs(i, j, n); } } if(teraz <= k) wyniki[teraz]++; for(int l = 0; l < n; l++){ odw[l][0] = 0; odw[l][1] = 0; } } } for(int i = 1; i <= k; i++) cout << wyniki[i] << " "; } |
English