提交时间:2025-06-02 13:58:10
运行 ID: 37917
#include<bits/stdc++.h> #define int long long #define For(i,a,b) for(int i=a,i##end=b;i<=i##end;i++) #define Rof(i,a,b) for(int i=a,i##end=b;i>=i##end;i--) #define rep(i, b) for(int i=1,i##end=b;i<=i##end;i++) using namespace std; const int N=1e6+9; char buf[(1<<21)+5],*p1,*p2; #define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) void chmn(long long &x,long long y){(x>y)&&(x=y);} int read(){ int f=0,x=0; char ch=getchar(); while(!isdigit(ch)){f|=(ch=='-');ch=getchar();} while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();} return f?-x:x; } int T,a[N],b[N],n; unordered_map<int,int>mp; struct node{ int id,v,ID; bool operator<(const node&X)const{ return v<X.v; } };vector<node>B; int get(int &x,int y){ if(x==y)return __builtin_popcount(x); int h=__lg(x^y)+1; if((x&((1<<h)-1))==0)return __builtin_popcount(x); return __builtin_popcount(x^(x&((1<<h)-1)))+1; } signed main(){ // printf("%.5lf\n",(&pppp-&ppp)/1024.0/1024.0); //freopen("op.in","r",stdin); //freopen("op.out","w",stdout); T=read();while(T--){ n=read(); rep(i,n)a[i]=read(); rep(i,n)b[i]=read(); long long ans=1e18; For(k,0,30){ vector<int>A;B.clear();mp.clear(); int all=0; rep(i,n){ A.push_back(b[i]-(a[i]>>k)); // all+=abs(b[i]-(a[i]>>k)); B.push_back(node{A.back(),(1<<k)-(a[i]&((1<<k)-1)),i}); } // cout<<all+k<<endl; sort(B.begin(),B.end()); A.push_back(0);sort(A.begin(),A.end()); long long res=k;int mid=max(A[n/2],0ll);//(n+1+1)/2-1 int cnt=0; for(int x:A)res+=abs(mid-x),mp[x]++,cnt+=(x<mid); chmn(ans,res); For(i,0,(int)B.size()-2){ cnt+=(B[i].id==mid); mp[B[i].id]--;mp[B[i].id-1]++; res+=(B[i].id>mid?-1:1); if(cnt*2>n+1&&mid>0){ res+=n+1-2*cnt; mid--; cnt-=mp[mid]; } if(B[i].v==B[i+1].v)continue; chmn(ans,res+get(B[i].v,B[i+1].v-1)); } } cout<<ans<<endl; } return 0; }