蓝桥杯模拟赛4 DIJ题代码待补

-------------------------------------------------------------------------------------

sth to add

-------------------------------------------------------------------------------------

 

H.

C/C++中__builtin_popcount()用于计算一个 32 位无符号整数有多少个位为1
GCC有一个叫做__builtin_popcount的内建函数,它可以精确的计算1的个数。尽管如此,不同于__builtin_ctz,它并没有被 翻译成一个硬件指令(至少在x86上不是)。相反的,它使用一张类似上面提到的基于表的方法来进行位搜索。这无疑很高效并且非常方便。

#include<stdio.h>
int n,t,m,k,v[105];
int main(){
    scanf("%d%d%d",&n,&m,&k);
    for(int i=0;i<n;i++){
        bool flag=1;
        for(int j=1;j<=t;j++){
            int cnt=__builtin_popcount(i^v[j]);
            if(cnt<k){flag=0;break;}
        }
        if(flag) v[++t]=i;
        if(t==m) break;
    }
    for(int i=1;i<=m;i++) printf("%d ",v[i]);
    return 0;
}
原文地址:https://www.cnblogs.com/shenben/p/12700021.html