1022 Digital Library (30 分) 【难度: 中 / 知识点: 哈希表】
生活随笔
收集整理的这篇文章主要介绍了
1022 Digital Library (30 分) 【难度: 中 / 知识点: 哈希表】
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
https://pintia.cn/problem-sets/994805342720868352/problems/994805480801550336
解析: 将每一部分都用哈希表映射。映射的结果是一个集合set, set可以自动排序,减少了我们排序的步骤。
需要注意的是第三点关键字查询,我们的一本书有很多的关键字,故所有的关键字都要拆分映射。
#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);//拆分关键字分别映射}}}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; }
总结
以上是生活随笔为你收集整理的1022 Digital Library (30 分) 【难度: 中 / 知识点: 哈希表】的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 1021 Deepest Root (2
- 下一篇: 1026 Table Tennis (3