CCF CSP 第33次(2024.03)(2_相似度計算_C++)(字符串中字母大小寫轉換+哈希集合)

CCF CSP 第33次(2024.03)(2_相似度計算_C++)

    • 題目背景:
    • 題目描述:
    • 輸入格式:
    • 輸出格式:
    • 樣例1輸入:
    • 樣例1輸出:
    • 樣例1解釋:
    • 樣例2輸入:
    • 樣例2輸出:
    • 樣例2解釋:
    • 樣例3輸入:
    • 樣例3輸出:
    • 子任務:
      • 解題思路:
        • 思路一(字符串中字母大小寫轉換+哈希集合):
      • 代碼實現
        • 代碼實現(思路一(字符串中字母大小寫轉換+哈希集合)):

時間限制: 1.0 秒
空間限制: 512 MiB

題目背景:

兩個集合的 Jaccard 相似度定義為:
Sim(A,B)= ∣A∪B∣/∣A∩B∣
?即交集的大小除以并集的大小。當集合 𝐴 和 𝐵完全相同時,𝑆𝑖𝑚(𝐴,𝐵)=1取得最大值;當二者交集為空時,𝑆𝑖𝑚(𝐴,𝐵)=0取得最小值。

題目描述:

除了進行簡單的詞頻統計,小 P 還希望使用 Jaccard 相似度來評估兩篇文章的相似性。 具體來說,每篇文章均由若干個英文單詞組成,且英文單詞僅包含“大小寫英文字母”。 對于給定的兩篇文章,小 P 首先需要提取出兩者的單詞集合 𝐴和 𝐵,即去掉各自重復的單詞。 然后計算出:

∣𝐴∩𝐵∣,即有多少個不同的單詞同時出現在兩篇文章中;
∣𝐴∪𝐵∣,即兩篇文章一共包含了多少個不同的單詞。
最后再將兩者相除即可算出相似度。 需要注意,在整個計算過程中應當忽略英文字母大小寫的區別,比如 the、The 和 THE 三者都應被視作同一個單詞。

試編寫程序幫助小 P 完成前兩步,計算出 ∣𝐴∩𝐵∣ 和 ∣𝐴∪𝐵∣;小 P 將親自完成最后一步的除法運算。

輸入格式:

從標準輸入讀入數據。

輸入共三行。

輸入的第一行包含兩個正整數 𝑛 和 𝑚,分別表示兩篇文章的單詞個數。

第二行包含空格分隔的 𝑛 個單詞,表示第一篇文章;

第三行包含空格分隔的 𝑚 個單詞,表示第二篇文章。

輸出格式:

輸出到標準輸出。

輸出共兩行。

第一行輸出一個整數 ∣𝐴∩𝐵∣,即有多少個不同的單詞同時出現在兩篇文章中;

第二行輸出一個整數 ∣𝐴∪𝐵∣,即兩篇文章一共包含了多少個不同的單詞。

樣例1輸入:

3 2
The tHe thE
the THE

樣例1輸出:

1
1

樣例1解釋:

𝐴=𝐵=𝐴∩𝐵=𝐴∪𝐵= {the}

樣例2輸入:

9 7
Par les soirs bleus dete jirai dans les sentiers
PICOTE PAR LES BLES FOULER LHERBE MENUE

樣例2輸出:

2
13

樣例2解釋:

𝐴=A= {bleus, dans, dete, jirai, les, par, sentiers, soirs} ∣𝐴∣=8

𝐵=B= {bles, fouler, les, lherbe, menue, par, picote} ∣𝐵∣=7

𝐴∩𝐵=A∩B= {les, par} ∣𝐴∩𝐵∣=2

樣例3輸入:

15 15
Thou that art now the worlds fresh ornament And only herald to the gaudy spring
Shall I compare thee to a summers day Thou art more lovely and more temperate

樣例3輸出:

4
24

子任務:

80% 的測試數據滿足:𝑛,𝑚≤100且所有字母均為小寫;

全部的測試數據滿足:𝑛,𝑚≤104 且每個單詞最多包含 10 個字母。

解題思路:

思路一(字符串中字母大小寫轉換+哈希集合):

1、解題步驟拆分:
① 忽略英文字母大小寫,我們可以將所有的字母轉換為小寫。
② 忽略一個集合中重復的單詞,我們可以想到哈希集合來進行降重。
③ 求并集,可以想到將兩個集合中的并入一個集合。
④ 求交集,可以想到通過查找集合A中的元素是否存在集合B中來求出。

代碼實現

代碼實現(思路一(字符串中字母大小寫轉換+哈希集合)):
#include<iostream>  
#include<unordered_set>  // 引入unordered_set容器,使用哈希表來存儲不重復元素
#include<algorithm>   // 引入算法庫,包含transform、tolower、toupper等函數using namespace std;int main(int argc, char const *argv[]) {int n, m;cin >> n >> m;  // 輸入兩個整數 n 和 m,分別表示集合A和集合B的元素個數unordered_set<string> setA, setB;  // 定義兩個unordered_set,分別存儲集合A和集合B的元素string word;  // 用于存儲每次輸入的單詞// 讀取n個單詞并插入集合setAfor (int i = 0; i < n; i++) {cin >> word;// 使用transform函數將單詞轉為小寫  //tolower轉小寫 。toupper轉為大寫transform(word.begin(), word.end(), word.begin(), ::tolower);  // tolower將字母轉為小寫setA.insert(word);  // 將小寫形式的單詞插入setA}// 讀取m個單詞并插入集合setBfor (int i = 0; i < m; i++) {cin >> word;// 使用transform函數將單詞轉為小寫transform(word.begin(), word.end(), word.begin(), ::tolower);  // tolower將字母轉為小寫setB.insert(word);  // 將小寫形式的單詞插入setB}unordered_set<string> intersection, unionSet;  // 定義兩個unordered_set,分別存儲交集和并集// 計算集合B與集合A的交集 (也可以使用一個變量來計數)for (auto &str : setB) {  // 遍歷集合B中的每個元素if (setA.count(str)) {  // 如果setA中包含該元素  //如果使用setA.find()則需與setA.end()進行比較判斷有無intersection.insert(str);  // 將該元素插入交集}}// 計算集合A與集合B的并集(也可以使用原來的set集合,將setB并入setA)unionSet = setA;  // 將setA的所有元素先復制到unionSet中for (auto &str : setB) {  // 遍歷集合B中的每個元素unionSet.insert(str);  // 將集合B中的元素插入unionSet(如果元素已經存在,insert不會重復插入)}// 輸出交集的大小cout << intersection.size() << endl;// 輸出并集的大小cout << unionSet.size() << endl;return 0;  // 返回0,表示程序成功結束
}
//ch = std::toupper(ch);  // 將字符轉換為大寫

歡迎大家和我溝通交流(????)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73701.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73701.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73701.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows .gitignore文件不生效的情況排查

概述 今天下班在家里搗騰自己的代碼&#xff0c;在配置.gitignore文件忽略部分文件的時候&#xff0c;發現死活不生效 問題根源 經過一通分析和排查才發現&#xff0c;是.gitignore文件的編碼錯了&#xff0c;剛開始還沒注意到&#xff0c;因為是在Windows下開發&#xff0c…

Uniapp自定義TabBar組件全封裝實踐與疑難問題解決方案

前言 在當前公司小程序項目中&#xff0c;我們遇到了一個具有挑戰性的需求&#xff1a;根據不同用戶身份動態展示差異化的底部導航欄&#xff08;TabBar&#xff09; 。這種多角色場景下的UI適配需求&#xff0c;在提升用戶體驗和實現精細化運營方面具有重要意義。 在技術調研…

四川省汽車加氣站操作工備考題庫及答案分享

1.按壓力容器的設計壓力分為&#xff08; &#xff09;個壓力等級。 A. 三 B. 四 C. 五 D. 六 答案&#xff1a;B。解析&#xff1a;按壓力容器的設計壓力分為低壓、中壓、高壓、超高壓四個壓力等級。 2.緩沖罐的安裝位置在天然氣壓縮機&#xff08; &#xff09;。 A. 出口處 …

2025年- G27-Lc101-542. 01 矩陣--java版

1.題目描述 2.思路 總結&#xff1a;用廣度優先搜索&#xff0c;首先要確定0的位置&#xff0c;不為0的位置&#xff0c;我們要更新的它的值&#xff0c;只能往上下左右尋找跟它最近的0的位置。 解題思路 我們用 BFS&#xff08;廣度優先搜索&#xff09;求解&#xff0c;因為 …

CANopen基本理論

目錄 一、CANopen簡介 二、OD對象字典 2.1 OD對象字典簡介 2.2 CANopen預定義連接集 三、PDO過程數據對象 四、SDO過程數據對象 五、特殊協議 5.1 同步協議 5.2 時間戳協議 5.3 緊急報文協議 六、NMT網絡管理 6.1 NMT節點狀態 6.2 NMT節點上線報文 6.3 NMT心跳報…

【Zookeeper搭建】Zookeeper分布式集群搭建完整指南

Zookeeper分布式集群搭建 &#xff08;一&#xff09;克隆前準備工作 一、時鐘同步 步驟&#xff1a; 1、輸入date命令可以查看當前系統時間&#xff0c;可以看到此時系統時間為PDT&#xff08;部分機器或許為EST&#xff09;&#xff0c;并非中國標準時間。我們在中國地區…

MVC基礎概念及相應代碼示例

&#xff08;舊的&#xff09;代碼實現方法 一個功能模塊的代碼邏輯&#xff08;顯示處理&#xff0c;數據處理&#xff0c;邏輯判定&#xff09;都寫在一起(耦合) &#xff08;新的&#xff09;代碼MVC分層實現方法 顯示部分實現&#xff08;View視圖&#xff09; 數據處理實…

nginx優化(持續更新!!!)

1.調整文件描述符 # 查看當前系統文件描述符限制 ulimit -n# 永久修改文件描述符限制 # 編輯 /etc/security/limits.conf 文件&#xff0c;添加以下內容 * soft nofile 65535 * hard nofile 65535# 編輯 /etc/sysctl.conf 文件&#xff0c;添加以下內容 fs.file-max 655352.調…

apache連接池機制討論

apache連接池的連接有效性 server一般會配置keep-alive超時時間&#xff0c;過了這個時間還沒新請求到來&#xff0c;則關閉連接。客戶端從連接池里拿出連接時&#xff0c;會檢查一下連接是否已關閉&#xff0c;如已關閉&#xff0c;會丟棄掉該連接&#xff0c;并嘗試從連接池…

【QT5 多線程示例】條件變量

文章目錄 條件變量使用 wakeOne()使用 wakeAll() 條件變量 QT的條件變量類是QWaitCondition&#xff0c;有wakeOne() 和 wakeAll() 兩個方法 wakeOne()&#xff1a;僅喚醒一個等待的線程。wakeAll()&#xff1a;喚醒所有等待的線程。 使用 wakeOne() https://github.com/Bi…

備賽藍橋杯之第十六屆模擬賽第1期職業院校組第四題:世紀危機(人口增長推算)

提示&#xff1a;本篇文章僅僅是作者自己目前在備賽藍橋杯中&#xff0c;自己學習與刷題的學習筆記&#xff0c;寫的不好&#xff0c;歡迎大家批評與建議 由于個別題目代碼量與題目量偏大&#xff0c;請大家自己去藍橋杯官網【連接高校和企業 - 藍橋云課】去尋找原題&#xff0…

從零構建大語言模型全棧開發指南:第三部分:訓練與優化技術-3.2.3預訓練任務設計:掩碼語言建模(MLM)與下一句預測(NSP)

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 3.2.3 預訓練任務設計:`掩碼語言建模(MLM)`與下一句預測(NSP)1. 掩碼語言建模(`Masked Language Modeling, MLM`)1.1 MLM的核心原理與數學形式1.2 高級掩碼優化技術1.2.1 `Span Masking(SpanBER…

OpenBMC:BmcWeb 生效路由2 Trie字典樹

OpenBMC:BmcWeb 生效路由1 基于method分類路由_openbmc web-CSDN博客 可以看到,在internalAdd中: std::vector<BaseRule*> rules; rules.emplace_back(ruleObject); trie.add(rule, static_cast<unsigned>(rules.size() - 1U)); ruleObject首先被放入了每個meth…

Appium中元素定位之一組元素定位API

應用場景 和定位一個元素相同&#xff0c;但如果想要批量的獲取某個相同特征的元素&#xff0c;使用定位一組元素的方式更加方便 在 Appium 中定位一組元素的 API 與定位單個元素的 API 類似&#xff0c;但它們返回的是一個元素列表&#xff08;List<MobileElement>&am…

第五周日志-重新學匯編(2)

機器語言 匯編語言(直接在硬件上工作——硬件系統結構&#xff09;&#xff1a; 1.機器語言 每一種微處理器硬件設計和內部結構不同&#xff08;決定了電信號不同&#xff0c;進而需要不同的機器指令&#xff09; #早期通過紙帶機/卡片機輸入計算機&#xff0c;進行運算 2…

【9】Strongswan collections —— enumerator

//以目錄枚舉為例子&#xff0c;說明enumerator&#xff0c;從源碼剝離可運行 #include <stdio.h> #include <stdbool.h> #include <dirent.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h&…

談談對spring IOC的理解,原理和實現

一、IoC 核心概念 1. 控制反轉&#xff08;Inversion of Control&#xff09; 傳統編程中對象自行管理依賴&#xff08;主動創建&#xff09;&#xff0c;而IoC將控制權轉移給容器&#xff0c;由容器負責對象的創建、裝配和管理&#xff0c;實現依賴關系的反向控制。 2. 依賴…

【Hugging Face 開源庫】Diffusers 庫 —— 擴散模型

Diffusers 的三個主要組件1. DiffusionPipeline&#xff1a;端到端推理工具__call__ 函數callback_on_step_end 管道回調函數 2. 預訓練模型架構和模塊UNetVAE&#xff08;Variational AutoEncoder&#xff09;圖像尺寸與 UNet 和 VAE 的關系EMA&#xff08;Exponential Moving…

甘肅旅游服務平臺+論文源碼視頻演示

4 系統設計 4.1系統概要設計 甘肅旅游服務平臺并沒有使用C/S結構&#xff0c;而是基于網絡瀏覽器的方式去訪問服務器&#xff0c;進而獲取需要的數據信息&#xff0c;這種依靠瀏覽器進行數據訪問的模式就是現在用得比較廣泛的適用于廣域網并且沒有網速限制要求的小程序結構&am…

路由選型終極對決:直連/靜態/動態三大類型+華為華三思科配置差異,一張表徹底講透!

路由選型終極對決&#xff1a;直連/靜態/動態三大類型華為華三思科配置差異&#xff0c;一張表徹底講透&#xff01; 一、路由&#xff1a;互聯網世界的導航系統二、路由類型深度解析三者的本質區別 三、 解密路由表——網絡設備的GPS華為&#xff08;Huawei&#xff09;華三&a…