トピック:
分析:
この質問のセットは、最終的な数の二組の総数が整数に等しくされないように、無反復エレメントことセット性を保証として、収集セットが属するにそれが挿入され、入力の各要素に対して実行するために使用さに等しいです。セット1 + 2の要素の組数の要素数 - 両方のセットに共通の要素の数。一般的な2つの要素のコレクションを探す:コレクションの各要素を、このコレクションに別の要素があるかどうかを見つけるために、findメソッドを使用します。答えへの最後の部門。
コード:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <set>
using namespace std;
set<int> num[55];
int n,m,k;
int main()
{
int val;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d",&m);
for(int j=1;j<=m;++j)
{
scanf("%d",&val);
num[i].insert(val);
}
}
scanf("%d",&k);
int x1,x2;
for(int i=1;i<=k;++i)
{
scanf("%d%d",&x1,&x2);
int ans = 0;
set<int>::iterator iter;
for(iter=num[x1].begin();iter!=num[x1].end();++iter)
if(num[x2].find(*iter) != num[x2].end())
ans++;
double res = 1.0*ans / (num[x1].size()+num[x2].size()-ans);
res = res*100;
printf("%.2f%%\n",res);
}
return 0;
}