#include<stdio.h> #include<string.h> #include<map> #include<math.h> using namespace std; long long func(long long a[],long long b[],int n){ long long res = 0; int idx1,jdx1; int visit[101]; memset(visit,0,sizeof(visit)); long long minn = 100000000000; for(int i=0;i<n;i++) for(int j=i+1;j<n;j++){ if((a[i]^b[j])<minn||(a[j]^b[i])<minn){ idx1 = i; jdx1 = j; minn = min((a[i]^b[j]),(a[j]^b[i])); } } visit[idx1]=1; visit[jdx1]=1; res += minn; for(int i=2;i<n;i++){ long long minv=100000000000; int idx = -1; for(int j = 0;j<n;j++){ if(visit[j]==0){ for(int x=0;x<n;x++){ if(x!=j&&visit[x]==1){ long long temp = min((a[j]^b[x]),(a[x]^b[j])); if(temp<minv){ minv = temp; idx = j; } } } } } visit[idx] = 1; res+=minv; } return res; } int main(){ freopen("B-large-practice.in","r",stdin); freopen("out2.out","w",stdout); int t; scanf("%d",&t); for(int j=1;j<=t;j++) { long long r[101]; long long b[101]; memset(r,0,sizeof(r)); memset(b,0,sizeof(b)); int n; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%lld",&r[i]); for(int i=0;i<n;i++) scanf("%lld",&b[i]); printf("Case #%d: %lldn",j,func(r,b,n)); } fclose(stdin); fclose(stdout); return 0; }
|
近期评论