※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

2399 Save Your Privacy!

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2399
各人のもつ個人情報のリストと流出した個人情報のリストを突き合わせてだれが流出させたかをチェックする問題。
個人情報を01のビット配列に変換してBit演算でOrとって情報量が増えなかったらその人。
二人以上や一人も候補がなければ-1.
簡単です。


#include<stdio.h>
#include<bitset>
void search(int n){
std::bitset<102> ps[102],ms;	
int m,p,ans,count=0;
for(int i=1;i<=n;i++){
	ps[i].reset();
	scanf("%d",&m);
	for(int j=0;j<m;j++){
		scanf("%d",&p);
		ps[i].set(p);
	}
}
scanf("%d",&m);
while(m--){
	scanf("%d",&p);
	ms.set(p);
}
for(int i=1;i<=n;i++){
	int s=ps[i].count();
	if(ps[i].count()==(ps[i]|ms).count()){
		ans=i;
		count++;
	}
	if(count>1)break;
}
if(count==1)printf("%d\n",ans);
else printf("-1\n");
}
int main(){
int n;
while(1){
	scanf("%d",&n);
	if(n==0)break;
	search(n);
}
}