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