日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

PAT甲级1063 Set Similarity:[C++题解]哈希表、去重

發布時間:2025/4/5 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PAT甲级1063 Set Similarity:[C++题解]哈希表、去重 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 題目分析
    • 題目鏈接

題目分析

來源:acwing

分析:集合相似度是兩個集合A、B都有的數字個數,除以兩者不同的數字個數,有以下公式:集合相似度 =NcNt=A∩BA+B?Nc=\frac{N_c}{N_t}=\frac{A∩B}{A+B-N_c}=Nt?Nc??=A+B?Nc?AB?

以樣例中的集合1和2為例解釋一下:

3 3 99 87 101 4 87 101 5 87 7 99 101 18 5 135 18 99 2 1 2 1 3

樣例1:兩個集合中元素個數分別為:A = 3個,B = 3個(注意不是4個,需要去重),兩個集合相同元素2個,所以Nc=2N_c =2Nc?=2,Nt=3+3?2=4N_t=3+3 -2 =4Nt?=3+3?2=4,這樣計算出來的50%。

求兩個集合的交集:Nc //時間復雜度O(M) for(auto x: A)if(x in B)Nc ++;

ac代碼

#include<bits/stdc++.h> using namespace std; const int N =55; unordered_set<int> S[N]; //有幾個集合就開幾個hash表,并且是set去重int main(){int n, k;cin >> n;for( int i = 1; i<= n; i++){int m;scanf("%d",&m);while(m--){int x;scanf("%d",&x);S[i].insert(x); //插入到集合i的hash表中}}//詢問cin >> k;while(k--){int a, b;scanf("%d%d",&a,&b);int nc = 0; //分子//遍歷集合a中的每個元素,如果在集合b中出現過,就統計下//這樣nc就是公共元素的個數,這里如果是公共元素,則.count(x)==1for( auto x: S[a]) nc += S[b].count(x);//分母int nt =S[a].size() + S[b].size() - nc;//%在C語言輸出,需要轉義 ,寫成%% printf("%.1lf%%\n", (double)nc/nt * 100);}}

題目鏈接

PAT甲級1063 Set Similarity
https://www.acwing.com/problem/content/1551/

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的PAT甲级1063 Set Similarity:[C++题解]哈希表、去重的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。