这为什么会在考场上爆0?
查看原帖
这为什么会在考场上爆0?
136516
君と僕のNOIP楼主2021/8/20 14:07

自测40,CCF爆0

想了大半年没搞懂

哪位大佬能救救孩子吗 嘤嘤嘤

#include<bits/stdc++.h>
using namespace std;
long long n,m,c,k;
long long a[1000001];
long long p[1000001];
long long q[1000001];
bool check[1000001]={false};
long long C[100000001];
bool yan=true;
int main()
{
	//freopen("zoo.in","r",stdin);
	//freopen("zoo.out","w",stdout);
	cin>>n>>m>>c>>k;
	for(int i=1;i<=n;i++)
	  cin>>a[i];
	long long ans=a[1];
	for(int i=2;i<=n;i++)
	 ans|=a[i];
	for(int i=1;i<=m;i++)
	 cin>>p[i]>>q[i];
	//cout<<ans<<endl;
	for(int i=1;i<=m;i++)
	{
		//cout<<(ans>>p[i])%2<<endl;
		if(((ans>>p[i])%2)==1)
		 check[q[i]]=true;
	}
	for(int i=1;i<=c;i++)
	{
		if(check[i]==true)C[i]=1;
		else C[i]=0;
	}
	long long sum=0;
	for(long long i=0;i<=pow(2,k)-1;i++){
		yan=true;
		for(int j=1;j<=m;j++)
		{
			if(((i>>p[j])%2==1)&&C[q[j]]==0)
			{
				yan=false;
				break;
			}
		}
		if(yan==true)sum++;
	}
	sum-=n;
	cout<<sum;
	return 0;
}

2021/8/20 14:07
加载中...