#include<bits/stdc++.h>
using namespace std;
pair<int,int>miejsca[200010];
long long wyniki[11];
int tab[100010][2];
int l, r, n;
bool czy(int a, int b){
if(tab[(a+n)%n][b%2]>=l && tab[(a+n)%n][b%2]<=r)return 1;
return 0;
}
int main()
{
int k, i;
scanf("%d%d", &n, &k);
for(i=0;i<n;i++)
{
scanf("%d", &tab[i][0]);
miejsca[tab[i][0]] = {i, 0};
}
for(i=0;i<n;i++)
{
scanf("%d", &tab[i][1]);
miejsca[tab[i][1]] = {i, 1};
}
for(l=1;l<=2*n;l++)
{
int licznik = 0, petla=0;
for(i=l;i<=2*n;i++){
r = i;
int a = miejsca[i].first;
int b = miejsca[i].second;
//printf("%d %d: %d %d %d: ", a, b, czy(a-1, b), czy(a, b+1), czy(a+1, b));
if(czy(a-1,b)==0 && czy(a+1, b)==0 && czy(a,b+1)==0){
//printf("ZERO SASIADOW\n");
licznik++;
}
else if(((int)czy(a-1,b)+(int)czy(a+1, b)+(int)czy(a,b+1)==1)){
licznik = licznik;
}
else if(czy(a-1, b) && czy(a+1, b) && (!(czy(a, b+1)))){
if(licznik==1){
petla = 1;
}
else
licznik--;
}
else if(czy(a-1, b) && czy(a, b+1) && (!czy(a+1, b))){
if(czy(a-1, b+1)){
licznik = licznik;
}
else if(licznik==1){
petla = 1;
}
else{
licznik--;
}
}
else if(czy(a+1, b) && czy(a, b+1) && (!czy(a-1, b))){
if(czy(a+1, b+1)){
licznik = licznik;
}
else if(licznik==1){
petla = 1;
}
else{
licznik--;
}
}
else{
if(czy(a+1, b+1) &&czy(a-1, b+1))
{
licznik = licznik;
}
else if(czy(a+1, b+1)==0 &&czy(a-1, b+1)==0){
licznik--;
if(licznik==1){
petla++;
}
else{
licznik--;
}
}
else{
if(licznik==1){
petla = 1;
}
else{
licznik--;
}
}
}
//printf("%d %d %d\n", licznik, l, i);
if(petla==1){
wyniki[1]+=2*n-i+1;
break;
}
if(licznik<=10){
wyniki[licznik]++;
}
}
}
for(i=1;i<=k;i++)printf("%lld ", 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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | #include<bits/stdc++.h> using namespace std; pair<int,int>miejsca[200010]; long long wyniki[11]; int tab[100010][2]; int l, r, n; bool czy(int a, int b){ if(tab[(a+n)%n][b%2]>=l && tab[(a+n)%n][b%2]<=r)return 1; return 0; } int main() { int k, i; scanf("%d%d", &n, &k); for(i=0;i<n;i++) { scanf("%d", &tab[i][0]); miejsca[tab[i][0]] = {i, 0}; } for(i=0;i<n;i++) { scanf("%d", &tab[i][1]); miejsca[tab[i][1]] = {i, 1}; } for(l=1;l<=2*n;l++) { int licznik = 0, petla=0; for(i=l;i<=2*n;i++){ r = i; int a = miejsca[i].first; int b = miejsca[i].second; //printf("%d %d: %d %d %d: ", a, b, czy(a-1, b), czy(a, b+1), czy(a+1, b)); if(czy(a-1,b)==0 && czy(a+1, b)==0 && czy(a,b+1)==0){ //printf("ZERO SASIADOW\n"); licznik++; } else if(((int)czy(a-1,b)+(int)czy(a+1, b)+(int)czy(a,b+1)==1)){ licznik = licznik; } else if(czy(a-1, b) && czy(a+1, b) && (!(czy(a, b+1)))){ if(licznik==1){ petla = 1; } else licznik--; } else if(czy(a-1, b) && czy(a, b+1) && (!czy(a+1, b))){ if(czy(a-1, b+1)){ licznik = licznik; } else if(licznik==1){ petla = 1; } else{ licznik--; } } else if(czy(a+1, b) && czy(a, b+1) && (!czy(a-1, b))){ if(czy(a+1, b+1)){ licznik = licznik; } else if(licznik==1){ petla = 1; } else{ licznik--; } } else{ if(czy(a+1, b+1) &&czy(a-1, b+1)) { licznik = licznik; } else if(czy(a+1, b+1)==0 &&czy(a-1, b+1)==0){ licznik--; if(licznik==1){ petla++; } else{ licznik--; } } else{ if(licznik==1){ petla = 1; } else{ licznik--; } } } //printf("%d %d %d\n", licznik, l, i); if(petla==1){ wyniki[1]+=2*n-i+1; break; } if(licznik<=10){ wyniki[licznik]++; } } } for(i=1;i<=k;i++)printf("%lld ", wyniki[i]); } |
English