提交时间:2025-11-10 20:51:25
运行 ID: 38879
#include<bits/stdc++.h> #define int long long using namespace std; #define y0 jp8akioi #define y1 jbhakioi #define yn baka24akioi #define fls fflush(stdout) template<typename T> inline void read(T &x){x=0;char c=getchar();bool neg=0;while(!isdigit(c)){if(c=='-')neg=1;c=getchar();}while(isdigit(c))x=(x<<1)+(x<<3)+(c^48),c=getchar();if(neg)x=-x;} #define read2(a,b) read(a),read(b) #define read3(a,b,c) read2(a,b),read(c) #define read4(a,b,c,d) read3(a,b,c),read(d) #define read5(a,b,c,d,e) read4(a,b,c,d),read(e) #define read6(a,b,c,d,e,f) read5(a,b,c,d,e),read(f) int n,m,a[8388608],cnt[16777216],_; int hb(int x){ return 63-__builtin_clzll(x); } void slv(){ read2(n,m); while(n--){ read(_),cnt[_]++; } n++; for(int i=0;i<(1<<m);i++){ while(cnt[i]--){ a[++n]=i; } } int h=64; for(int i=1;i<n;i++){ h=min(h,hb(a[i]^a[i+1])); if(a[i]==a[i+1]){ cout<<0<<enld; return; } } int mx=(1<<h<<1)-1; for(int i=0;i<=mx;i++)cnt[i]=1e18; for(int i=1;i<n;i++){ int v=(a[i]^a[i+1]); if(hb(v)!=h)continue; for(int x=0;x<=mx;x++){ cnt[x]=min(cnt[x],v+abs((a[i]^x)-(a[i+1]^x))); } } unsigned int ans=0; for(int i=0;i<(1<<m);i++){ ans+=(i+1)*cnt[i&mx]; } cout<<ans<<endl; } signed main(){ // int T;read(T);while(T--) slv(); return 0; }