神奇的事
查看原帖
神奇的事
782898
Time_Limit_Exceed楼主2022/10/5 16:40
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,m,c,k;
int a[N],p[N],q[N],b[N],sum;
map<bool,bool>vis;
map<bool,bool>y;
void dfs(int x,int p){
	if(x==1&&vis[p]) return;
	if(p==k){
		++sum;
		return;
	}
	dfs(0,p+1);
	dfs(1,p+1);
}
int main(){
	cin>>n>>m>>c>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=m;i++){
		cin>>p[i]>>q[i];
		vis[p[i]]=1;
	}
	for(int i=1;i<=n;i++){
		memset(b,0,sizeof(b));
		int t=a[i],cnt=0;
		while(t){
			b[cnt]=t%2;
			t/=2;
			++cnt;
		}
		for(int j=0;j<k;j++){
			if(!vis[j]) continue;
			for(int l=1;l<=m;l++){
				if(p[l]==j) y[q[l]]=1;
			}
		}
	}
	for(int i=0;i<=k;i++){
		vis[i]=0;
	}
	for(int i=1;i<=m;i++){
		if(!y[q[i]]) vis[k-p[i]]=1;
	}
	dfs(0,1);
	dfs(1,1);
	cout<<sum-n<<endl;
	return 0;
}


此代码(纯暴力,样例不过,但是40分,是为什么
2022/10/5 16:40
加载中...