| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 38884 | dtmm | 【S】T2 | C++ | 运行出错 | 0 | 0 MS | 264 KB | 2523 | 2025-11-10 21:41:19 |
#include<bits/stdc++.h> #define int unsigned long long #define fir first #define sec second using namespace std; const int N=9e6,M=16777217; int n,m,a[N],t[M],b[M]; pair<int,int>q[M]; int qpow(int x,int y) { if(y==0) { return 1; } int z=qpow(x,y/2); if(y%2) { return z*z*x; } else { return z*z; } } int geth(int x) { int y=0,z=1; for(;y<=24;y++) { if(x%2) { z=y; } x/=2; } return z; } int yihuo(int x,int y) { int z=0,c=1; for(int i=0;i<=24;i++) { if((x%2==1&&y%2==0)||(x%2==0&&y%2==1)) { z+=c; } x/=2; y/=2; c*=2; } return z; } int abss(int x,int y) { if(x>y) { return x-y; } else { return y-x; } } signed main() { freopen("guidance1.in","r",stdin); freopen("guidance1.out","w",stdout); cin>>n>>m; for(int i=1;i<=n;i++) { cin>>a[i]; if(t[a[i]]) { t[a[i]]=2; } else { t[a[i]]=1; } } int ls=0,h=30; vector<pair<int,int>>p; for(int i=1;i<M;i++) { while(t[i]) { if(ls) { int nwh=geth(yihuo(i,ls)); if(nwh<h) { h=nwh; p.clear(); p.push_back({ls,i}); } else if(nwh==h) { p.push_back({ls,h}); } } ls=i; t[i]--; } } int mx=qpow(2,h); for(int i=0;i<mx;++i) { b[i]=1e19; for(int j=0;j<p.size();++j) { if(b[i]>abss(yihuo(p[j].fir,i),yihuo(p[j].sec,i))+yihuo(p[j].fir,p[j].sec)) { q[i]=p[j]; b[i]=abss(yihuo(p[j].fir,i),yihuo(p[j].sec,i))+yihuo(p[j].fir,p[j].sec); } } } for(int i=1;i<qpow(2,m-h);++i) { for(int j=0;j<mx;++j) { b[j+i*mx]=abss(yihuo(q[j].fir,j+i*mx),yihuo(q[j].sec,j+i*mx))+yihuo(q[j].fir,q[j].sec); } } int cnt=0; for(int i=0;i<qpow(2,m);i++) { cnt=cnt+b[i]*(i+1); //cout<<b[i]<<"\n"; } cout<<cnt; return 0; }