1063セットの類似性(25分)
整数の所定の2セット、セットの類似度であると定義される /、ここで Nのcは二組によって共有される別個の共通の番号の数であり、 Nのtは異なる数の合計数であります二組。あなたの仕事は、セットの任意のペアの類似度を計算することです。
入力仕様:
各入力ファイルには、1つのテストケースが含まれています。各ケースは、第一の正の整数与える N(集合の総数≤)を。次いで、 Nラインは、それぞれが正でセットを与え、フォロー M(≤)と、続いて [範囲のMの整数0]。セットの入力後、正の整数 K(≤)は、続いて与えられた クエリのKlines。各クエリは、(セットは1から番号が付けられているセット番号の組を与える N)。行のすべての数字は、スペースで区切られます。
出力仕様:
各クエリに対して、1つの小数場所まで正確なパーセンテージの形で、一列に集合の類似性を印刷します。
サンプル入力:
3
3 99 87 101
4 87 101 5 87
7 99 101 18 5 135 18 99
2
1 2
1 3
サンプル出力:
50.0%
33.3%
著者:CHEN、越
単位:浙江大学
制限時間:500ミリ秒
メモリの制限:64メガバイト
質問の意味:
タイトル類似度の定義は、Ncが二組に共通であるNC / Ntの* 100%、要素の数に等しくされていない設定、Ntとは、二つの等しくないコレクション内の要素の数です。あなたの仕事は、コレクションの類似性を与えられた計算することです。
NCは、二組の交差内の要素の数です。
NTは、二組のセット内の要素の数です。
ソリューション:
もともと配列は、明らかにメモリの制限、スピードが設定され、非常に便利なああを学びました!!!前に一度。
%%するprintfの出力%
ACコード:
書式#include <iostreamの> の#include < 設定 > 書式#include <アルゴリズム> 書式#include < 文字列 > の#include <CStringの> 使用して 名前空間はstd; セット < INT > S [ 55 ]。 INTのN、M、K。 INT メイン(){ CIN >> N。 以下のために(int型 i = 1 ; iが<= N; iが++ ){ CIN >> Mと、 用(INT J = 1 ; J <= Mであり、j ++ ){ int型バツ; cinを >> X; S [i]は.insert(X)。 } } CIN >> K。 以下のために(int型 i = 1 ; iは= Kを<; iは++は){ int型、B。 CIN >> A >> B; 設定 < 整数 > ::イテレータit。 int型のカウント= 0 ; 用(;それ= sで[A] .END();!それはS [A] .beginを()=それ++ ){ もし、(S [B] .find(※)= sで[B] .END()! )++数えます。 } のprintf("%.1f %% \ n "、*カウント1.0 /(s[a].size()+s[b].size()-count)* 100 ); } 戻り 0 ; }