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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

L2-005 集合相似度-PAT团体程序设计天梯赛GPLT

發(fā)布時(shí)間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 L2-005 集合相似度-PAT团体程序设计天梯赛GPLT 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目來源:團(tuán)體程序設(shè)計(jì)天梯賽-練習(xí)集
題目地址:L2-005 集合相似度

題目大意

給定 nnn 個(gè)集合,然后有 kkk 次詢問,每次詢問都要求出 Nc/Nt×100%N_c / N_t \times100\%Nc?/Nt?×100%

NcN_cNc? 表示兩個(gè)集合中都有的數(shù)的個(gè)數(shù)(重復(fù)不計(jì)),相當(dāng)于求交集去重
NtN_tNt? 表示兩個(gè)集合一共有多少個(gè)數(shù)(重復(fù)不計(jì)),相當(dāng)于求并集去重

題目分析

根據(jù)題意,我們?cè)?strong>存儲(chǔ)集合就時(shí)候就可以將重復(fù)元素去掉,可以用上C++ STL提供的 setsetset 容器,它不會(huì)保存重復(fù)元素。

設(shè)要求的兩個(gè)集合分別為 AAABBB,它們的大小分別為 SizeASize_ASizeA?SizeBSize_BSizeB?

我們先遍歷集合 AAA ,每訪問一個(gè)元素就判斷它是否在集合 BBB中出現(xiàn),如果出現(xiàn),則計(jì)數(shù)器 cntcntcnt 加一,最后得出的 cntcntcnt 就是 NcN_cNc?

因?yàn)橛?cntcntcnt 個(gè)數(shù)在集合 AAA 出現(xiàn)一遍,又在集合 BBB 中出現(xiàn)了一遍,所以求 NtN_tNt? 的時(shí)候我們需要將它減去,最后我們得到求 NtN_tNt? 的式子如下:
Nt=SizeA+SizeB?cntN_t=Size_A+Size_B-cntNt?=SizeA?+SizeB??cnt

代碼如下

#include <bits/stdc++.h>using namespace std; int n, m, t, k, a, b; const int maxn = 1e4 + 10; /*** 利用stl中set來進(jìn)行集合的存儲(chǔ)*/ set<int> vis[maxn]; int main() {scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d", &m);while (m--) {scanf("%d", &t);vis[i].insert(t);}}scanf("%d", &k);while (k--) {scanf("%d %d", &a, &b);// set.size() 返回的是集合中不同元素的個(gè)數(shù)int cnt1 = vis[a].size(), cnt2 = vis[b].size(), cnt3 = 0;for (auto e : vis[a]) {if (vis[b].count(e))cnt3++;}printf("%.2f%\n", (double)cnt3 / (cnt1 + cnt2 - cnt3) * 100);}return 0; }

如果本文對(duì)你有所幫助,記得要點(diǎn)贊哦~

總結(jié)

以上是生活随笔為你收集整理的L2-005 集合相似度-PAT团体程序设计天梯赛GPLT的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。