A Digital Library contains millions of books, stored according to their titles, authors, key words of their abstracts, publishers, and published years. Each book is assigned an unique 7-digit number as its ID. Given any query from a reader, you are supposed to output the resulting books, sorted in increasing order of their ID's.
- Input Specification:
- Each input file contains one test case. For each case, the first line contains a positive integer N(≤10?4??) which is the total number of books. ThenNblocks follow, each contains the information of a book in 6 lines:
- Line #1: the 7-digit ID number;
- Line #2: the book title -- a string of no more than 80 characters;
- Line #3: the author -- a string of no more than 80 characters;
- Line #4: the key words -- each Word is a string of no more than 10 characters without any white space, and the keywords are separated by exactly one space;
- Line #5: the publisher -- a string of no more than 80 characters;
- Line #6: the published year -- a 4-digit number which is in the range [1000, 3000].
- It is assumed that each book belongs to one author only, and contains no more than 5 key words; there are no more than 1000 distinct key words in total; and there are no more than 1000 distinct publishers.
- After the book information, there is a line containing a positive integer M(≤1000) which is the number of user's search queries. ThenMlines follow, each in one of the formats shown below:
- 1: a book title
- 2: name of an author
- 3: a key Word
- 4: name of a publisher
- 5: a 4-digit number representing the year
- Output Specification:
For each query, first print the original query in a line, then output the resulting book ID's in increasing order, each occupying a line. If no book is found, print Not Found instead.
- Sample Input:
- 3
- 1111111
- The Testing Book
- Yue Chen
- test code debug sort keywords
- ZUCS Print
- 2011
- 3333333
- Another Testing Book
- Yue Chen
- test code sort keywords
- ZUCS Print2
- 2012
- 2222222
- The Testing Book
- CYLL
- keywords debug book
- ZUCS Print2
- 2011
- 6
- 1: The Testing Book
- 2: Yue Chen
- 3: keywords
- 4: ZUCS Print
- 5: 2011
- 3: blablabla
- Sample Output:
- 1: The Testing Book
- 1111111
- 2222222
- 2: Yue Chen
- 1111111
- 3333333
- 3: keywords
- 1111111
- 2222222
- 3333333
- 4: ZUCS Print
- 1111111
- 5: 2011
- 1111111
- 2222222
- 3: blablabla
- Not Found
- #include<bits/stdc++.h>
- using namespace std;
- struct Book{
- string bookId;
- string title;
- string author;
- set<string> keywords;
- string publisher;
- string year;
- };
- map<string,set<string>> Title,Author,Publisher,Keyword,Year;
- set<string> change(string str){
- int len=(int)str.size();
- set<string> ans;
- string Word="";
- for(int i=0;i<len;i++){
- char c=str[i];
- if(c!=' '){
- Word+=c;
- }else{
- ans.insert(Word);
- Word.clear();
- }
- }
- ans.insert(Word);
- return ans;
- }
- void GetQuery(map<string,set<string>>&mp,string &query){// 传参慢用引用
- if(mp.find(query)==mp.end()){
- cout<<"Not Found\n";
- }else{
- for(set<string>::iterator it=mp[query].begin();it!=mp[query].end();it++)
- {
- cout<<*it<<"\n";
- }
- }
- }
- int main(){
- iOS::sync_with_stdio(false);
- cin.tie(0);
- int n;
- cin>>n;
- cin.get();
- string str;
- for(int i=0;i<n;i++){
- Book book;
- getline(cin,book.bookId);
- getline(cin,book.title);
- getline(cin,book.author);
- getline(cin,str);
- book.keywords=change(str);
- getline(cin,book.publisher);
- getline(cin,book.year);
- Title[book.title].insert(book.bookId);
- Author[book.author].insert(book.bookId);
- Publisher[book.publisher].insert(book.bookId);
- Year[book.year].insert(book.bookId);
- for(set<string>::iterator it=book.keywords.begin();it!=book.keywords.end();it++){
- Keyword[*it].insert(book.bookId);
- }
- }
- int m;
- cin>>m;
- string query,origin;
- cin.get();
- for(int i=0;i<m;i++ ){
- getline(cin,query);
- origin=query;
- int type=query[0]-'0';
- query=query.erase(0,3);
- cout<<origin<<"\n";
- switch(type){
- case 1: GetQuery(Title,query);break;
- case 2: GetQuery(Author,query);break;
- case 3: GetQuery(Keyword,query);break;
- case 4: GetQuery(Publisher,query);break;
- case 5: GetQuery(Year,query);break;
- };
- }
- return 0;
- }
来源: http://www.bubuko.com/infodetail-3142093.html