#include <bits/stdc++.h> using namespace std; int t[41]; int p[41]; int N; pair<int,int>wynik[41]; void init(){ for(int i =1;i<=N;i++){ wynik[i].first = 0; wynik[i].second = 100000; } } void inwersje(int k){ int inw = 0; for(int i =0;i<k;i++) for(int j =i+1;j<k;j++) if(p[i]>p[j])inw++; if(wynik[k].second>inw){ wynik[k].second = inw; wynik[k].first = 1; } else if(wynik[k].second==inw){ wynik[k].first++; } } int main() { cin>>N; init(); for(int i = 0;i<N;i++) cin>>t[i]; long long count = pow(2,N); for (int i = 0; i < count; i++){ int k = 0; for (int j = 0; j < N; j++){ if ((i & (1 << j)) > 0) p[k++] = t[j]; } inwersje(k); } for(int i = 1;i<=N;i++){ cout<<wynik[i].second<<" "<<wynik[i].first<<"\n"; } 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 | #include <bits/stdc++.h> using namespace std; int t[41]; int p[41]; int N; pair<int,int>wynik[41]; void init(){ for(int i =1;i<=N;i++){ wynik[i].first = 0; wynik[i].second = 100000; } } void inwersje(int k){ int inw = 0; for(int i =0;i<k;i++) for(int j =i+1;j<k;j++) if(p[i]>p[j])inw++; if(wynik[k].second>inw){ wynik[k].second = inw; wynik[k].first = 1; } else if(wynik[k].second==inw){ wynik[k].first++; } } int main() { cin>>N; init(); for(int i = 0;i<N;i++) cin>>t[i]; long long count = pow(2,N); for (int i = 0; i < count; i++){ int k = 0; for (int j = 0; j < N; j++){ if ((i & (1 << j)) > 0) p[k++] = t[j]; } inwersje(k); } for(int i = 1;i<=N;i++){ cout<<wynik[i].second<<" "<<wynik[i].first<<"\n"; } return 0; } |