HDU4712 Hamming Distance(随机化“算法”)

http://acm.hdu.edu.cn/showproblem.php?pid=4712

【题意】

定义哈夫曼距离:两个数字,异或值的二进制中,1的个数。给出n个16进制数,可任选两个数求哈夫曼距离,求最小的哈夫曼距离。

【随机化】这玩意也能是个算法,我只能说服自己是概率论的伟大!

【分析】

由题意可看出,本题哈夫曼距离只出现在【0,20】,。。

设输入的n个数是均匀随机分布的数字,那么哈夫曼距离出现的频率也应该均匀。从n个数中任选两个数,恰好是这个最小哈夫曼距离的概率是 1/21。假如正确答案是ans,取k次,答案错误的概率约 ( (21-ans) / 21)的k次幂。k越大,错误率越低。。。

【代码】

#include
using namespace std;
int a[202020];
int cal(int x)
{
    int res=0;
    while(x)res+=x&1,x>>=1;
    return res;
}
int main()
{
    srand(time(0));
    int T,n;cin>>T;
    while(T--)
    {
        cin>>n;
        for(int i=0;i


你可能感兴趣的:(ACM**概率论*****)