给你几个问题,和每个问题对于k个人他们所了不了解。
让你判断是否存在挑出任意几个问题,能让这k个人最多只了解这些问题的一半。
POINT:
答案必为挑2个问题组合,状态压缩一下。
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <map>
#include <algorithm>
using namespace std;
#define LL long long
const int maxn = 20;
map<int,int>mp;
int main()
{
int n,k;
scanf("%d %d",&n,&k);
int cnt[maxn];
int num=0;
for(int i=1;i<=n;i++){
int now=0;
for(int j=0;j<k;j++){
int a;
scanf("%d",&a);
if(a==1)
now=now|(1<<j);
}
if(mp[now]==0){
mp[now]=1;
cnt[++num]=now;
}
}
for(int i=1;i<=num;i++){
for(int j=1;j<=num;j++){
int now=0;
for(int s=0;s<=k;s++){
now=now|((cnt[i]>>s)&(cnt[j]>>s));
}
if(now==0){
printf("YES\n");
return 0;
}
}
}
printf("NO\n");
}