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