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 (≤104) which is the total number of books. Then N blocks 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. Then M lines 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.
#include<iostream> #include<string> #include<algorithm> usingnamespace std; structnode{ string id,title,author,keyword,publish,year; }books[10010]; boolcmp(node a,node b){ return a.id<b.id; } intmain(){ int n; cin>>n; for (int i = 0; i < n; ++i) { node temp; cin>>temp.id; getchar(); getline(cin,temp.title); getline(cin,temp.author); getline(cin,temp.keyword); getline(cin,temp.publish); cin>>temp.year;
books[i] = temp; } sort(books,books+n,cmp); int m; cin>>m; for (int i = 0; i < m; ++i) { int index; string str; int flag = 0; cin>>index; getchar();getchar(); getline(cin,str); cout<<index<<": "<<str<<endl; switch(index){ case1: for (int it = 0; it < n; ++it) { if (books[it].title == str) { flag = 1; cout<<books[it].id<<endl; } } if (flag==0) { cout<<"Not Found"<<endl; } flag = 0; break; case2: for (int it = 0; it < n; ++it) { if (books[it].author == str) { flag = 1; cout<<books[it].id<<endl; } } if (flag==0) { cout<<"Not Found"<<endl; } flag = 0; break; case3: for (int it = 0; it < n; ++it) { if (books[it].keyword.find(str)!=string::npos) { flag = 1; cout<<books[it].id<<endl; } } if (flag==0) { cout<<"Not Found"<<endl; } flag = 0; break; case4: for (int it = 0; it < n; ++it) { if (books[it].publish == str) { flag = 1; cout<<books[it].id<<endl; } } if (flag==0) { cout<<"Not Found"<<endl; } flag = 0; break; case5: for (int it = 0; it < n; ++it) { if (books[it].year == str) { flag = 1; cout<<books[it].id<<endl; } } if (flag==0) { cout<<"Not Found"<<endl; } break; } } return0; }