题目大意:给你很多串,最多10^5个串,每个串长度是5,16进制转化为2进制,问你任意两个串抑或得到1的最小的个数
#include<stdio.h>
#include<stdlib.h>
#define N 100005
int a[N];
int main()
{
int t,i,j,k,ans,min,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%X",&a[i]);//16进制读取
min=20;//结果初始为最大20
for(i=1;i<=200000;i++)
{
j=rand()%n;//随机函数
k=rand()%n;
if(j==k)
continue;
ans=0;
int tmp=a[j]^a[k];
while(tmp)//抑或算1的个数,保存到ans中
{
if(tmp&1)
ans++;
tmp>>=1;
}
if(ans<min)
min=ans;
}
printf("%d\n",min);
}
return 0;
}
hdu 4712
最新推荐文章于 2018-02-02 09:46:40 发布