60分,后面RE或者WA
查看原帖
60分,后面RE或者WA
897873
lwthree楼主2024/9/15 11:28

代码:

#include <bits/stdc++.h>
using namespace std;

int check(int ai){ //这个我是检测哪一位是1的范围是0~k-1
    int k=ai;
    int i=0;
    while (k){
        if (k&1){
            return i;
        }
        k>>=1;
        i++;
    }
    return -1; //没用到但是
}

int a[1000050];
int p[70];

int main(){
    memset(p,0,sizeof(p));
    int n,m,c,k;
    cin>>n>>m>>c>>k;
    for (int i=1;i<=n;i++){ //输入ai
        cin>>a[i];
    }
    int pi,qi;
    for (int i=1;i<=m;i++){ //qi感觉用不到啊
        cin>>pi>>qi;
        p[pi]=1;
    }
    int sum=1; //应为要乘2所以初始设为1
    for (int i=1;i<=n;i++){ //枚举每个动物
        int u=a[i];
        while (u){ //如果u即ai的二进制还有数的话
            if (p[check(u)]==1)//把在指南里的且在动物的二进制表示里的数标记成2
                p[check(u)]=2;
            u-=u&-u;//把检测过的位数的1删掉
        }
    }
    for (int i=0;i<k;i++){
        if (p[i]==2||p[i]==0){ //2表示饲料买了所以可以算,0表示根本不在指南上可以算
            // cout<<i<<endl; //不用管 测试用的
            sum*=2; //每次乘2
        }
    }
    sum-=n; //把动物数减掉防止重复
    if (sum<0) { //没用上
        cout<<0;
    }
    else 
        cout<<sum;
    return 0;
}
2024/9/15 11:28
加载中...