Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
37926 | baka24 | 【BJ】T1 | C++ | 通过 | 100 | 834 MS | 4960 KB | 1906 | 2025-06-02 14:38:26 |
#include<bits/stdc++.h> using namespace std; #define int long long #define popcnt __builtin_popcount int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=200010,N=30,inf=1e18; int n,m,ans; struct node{ int p,q,t; bool operator<(const node&G)const{ return q<G.q; } }a[MAXN]; int get(int l,int r){ int res=0,x=0; for(int i=N;~i;i--){ if(x+(1<<i)<=r)x+=1<<i,res++; if(x>=l)return res; } return inf; } int val(int x,int sum,int sum1,int sum2){ return (x<=0?sum:x*m-sum1+sum2-x*(n-m)+x); } #define pii pair<int,int> #define fr first #define sc second #define mk make_pair pii p[MAXN];int id[MAXN]; void slv(){ n=read(),ans=inf,m=n/2; for(int i=1;i<=n;i++)a[i].p=read(),a[i].q=0; for(int i=1;i<=n;i++)a[i].t=read(); for(int o=0;o<=N;o++){ sort(a+1,a+n+1); int sum1=0,sum2=0,sum=0; for(int i=1;i<=n;i++)p[i]=mk(a[i].t-a[i].p,n-i),sum+=abs(a[i].t-a[i].p); sort(p+1,p+n+1); for(int i=1;i<=n;i++){ if(i<=m)sum1+=p[i].fr;else sum2+=p[i].fr; id[n-p[i].sc]=i; } int tmp=val(p[m].fr,sum,sum1,sum2); for(int i=n;i>1;i--){ sum-=abs(a[i].t-a[i].p); sum+=abs(a[i].t-a[i].p-1); p[id[i]].fr--; if(id[i]<=m)sum1--; else sum2--; tmp=min(tmp,val(p[m].fr,sum,sum1,sum2)+get((1<<o)-a[i].q,(1<<o)-a[i-1].q-1)); } ans=min(ans,tmp+o); for(int i=1;i<=n;i++)a[i].q|=(a[i].p&1)<<o,a[i].p>>=1; } printf("%lld\n",ans); } signed main(){ // freopen("1.in","r",stdin);freopen("1.out","w",stdout); int _=read();while(_--) slv(); // cerr<<(clock()*1.0)/CLOCKS_PER_SEC<<"s"<<endl; return 0; }