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