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