代码求调
查看原帖
代码求调
666175
HLlll楼主2022/10/26 13:07
#include<bits/stdc++.h>

using namespace std;

long long n,m,c,k;
long long ans=0,nm=0;
long long a[1000005];
bool che[1000005];

int main(){
	cin>>n>>m>>c>>k;
	for(long long i=1;i<=n;i++){
		scanf("%lld",&a[i]);
	}
	for(int i=1;i<=m;i++){
        long long p,q;
		scanf("%lld%lld",&p,&q);
		if(!che[p]){
        	nm+=(1<<p);
            che[p]=1;
        }
    }
	for(long long i=1;i<=n;i++){
		if(a[i] & nm){
			nm-=(a[i] & nm);
		}
	}
	for(long long i=0;i< (1<<k);i++){
		if(i & nm)
			continue;
		ans++;
	}
    printf("%lld",ans-n);
    return 0;
}

只A了前面12个点,60分 思路是先把所有需要满足的规则位数记录下来,再把已满足的删去,剩下一定不能为1的位置,再枚举1<<k所有的数来判断ans是否++。看不出哪里错了啊,求助大佬

2022/10/26 13:07
加载中...