#include <bits/stdc++.h>
#define PB push_back
#define ST first
#define ND second
#define _ ios_base::sync_with_stdio(0); cin.tie(0);
//mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
using namespace std;
using ll = long long;
using pi = pair<int,int>;
using vi = vector<int>;
const int nax = 22;
int n;
int p[nax];
int ans[nax][nax*nax];
int cnt[(1<<nax)];
int main() {_
cin>>n;
for(int i=0; i<n; i++) {
cin>>p[i];
}
for(int i=1; i<(1<<n); i++) {
int b = 0;
for(int j=0; j<n; j++) if((1<<j)&i) b=j;
cnt[i] = cnt[i^(1<<b)];
for(int j=0; j<n; j++) {
if((1<<j)&i) {
if(p[j]>p[b]) cnt[i]++;
}
}
ans[__builtin_popcount(i)][cnt[i]]++;
}
for(int i=1; i<=n; i++) {
for(int j=0; j<n*(n-1); j++) {
if(ans[i][j]>0) {
cout<<j<<" "<<ans[i][j]<<"\n";
break;
}
}
}
}
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 | #include <bits/stdc++.h> #define PB push_back #define ST first #define ND second #define _ ios_base::sync_with_stdio(0); cin.tie(0); //mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); using namespace std; using ll = long long; using pi = pair<int,int>; using vi = vector<int>; const int nax = 22; int n; int p[nax]; int ans[nax][nax*nax]; int cnt[(1<<nax)]; int main() {_ cin>>n; for(int i=0; i<n; i++) { cin>>p[i]; } for(int i=1; i<(1<<n); i++) { int b = 0; for(int j=0; j<n; j++) if((1<<j)&i) b=j; cnt[i] = cnt[i^(1<<b)]; for(int j=0; j<n; j++) { if((1<<j)&i) { if(p[j]>p[b]) cnt[i]++; } } ans[__builtin_popcount(i)][cnt[i]]++; } for(int i=1; i<=n; i++) { for(int j=0; j<n*(n-1); j++) { if(ans[i][j]>0) { cout<<j<<" "<<ans[i][j]<<"\n"; break; } } } } |
English