第一次听说随机算法,在给的n组数据间随机取两个组比较,当随机次数达到一定量时,答案就出来了。
#include<stdio.h> #include<stdlib.h> #include<string.h> #define min(a,b) (a>b?b:a) int a[101000]; int find(int b) { int ans=0; while(b) { if(b&1)ans++; b>>=1; } return ans; } int main() { int n,ans,i,j,k,t; scanf("%d",&t); while(t--) { ans=100; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%X",&a[i]); for(i=0;i<150000;i++) { j=rand()%n+1; k=rand()%n+1; if(j==k)j=j%n+1; ans=min(ans,find(a[j]^a[k])); } printf("%d ",ans); } return 0; }