1022 Digital Library (30 分) 【难度: 中 / 知识点: 哈希表】
生活随笔
收集整理的這篇文章主要介紹了
1022 Digital Library (30 分) 【难度: 中 / 知识点: 哈希表】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336
解析: 將每一部分都用哈希表映射。映射的結(jié)果是一個集合set, set可以自動排序,減少了我們排序的步驟。
需要注意的是第三點關(guān)鍵字查詢,我們的一本書有很多的關(guān)鍵字,故所有的關(guān)鍵字都要拆分映射。
#include<bits/stdc++.h> using namespace std; unordered_map<string,set<string>> hush[6]; int n,m; string id,s[6]; int main(void) {cin>>n;getline(cin,id);for(int i=0;i<n;i++){getline(cin,id);for(int j=1;j<=5;j++) getline(cin,s[j]);for(int j=1;j<=5;j++){if(j!=3) hush[j][s[j]].insert(id);else //是第三點{stringstream l(s[j]);string temp;while(l>>temp) hush[j][temp].insert(id);//拆分關(guān)鍵字分別映射}}}cin>>m; string temp; getline(cin,temp);for(int i=0;i<m;i++){getline(cin,temp);cout<<temp<<endl;int op=temp[0]-'0';temp=temp.substr(3);auto t=hush[op][temp];if(t.size()) {for(auto i=t.begin();i!=t.end();i++) cout<<*i<<endl;}else cout<<"Not Found"<<endl;}return 0; }
總結(jié)
以上是生活随笔為你收集整理的1022 Digital Library (30 分) 【难度: 中 / 知识点: 哈希表】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1021 Deepest Root (2
- 下一篇: 1026 Table Tennis (3