「aoj2391~2340」の編集履歴(バックアップ)一覧に戻る

aoj2391~2340 - (2012/07/10 (火) 10:46:10) のソース

*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);
	}
 }