首页 > 代码库 > PAT1022. Digital Library (30)
PAT1022. Digital Library (30)
1022. Digital Library (30)
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 (<=10000) 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.
Sample Input:31111111The Testing BookYue Chentest code debug sort keywordsZUCS Print20113333333Another Testing BookYue Chentest code sort keywordsZUCS Print220122222222The Testing BookCYLLkeywords debug bookZUCS Print2201161: The Testing Book2: Yue Chen3: keywords4: ZUCS Print5: 20113: blablablaSample Output:
1: The Testing Book111111122222222: Yue Chen111111133333333: keywords1111111222222233333334: ZUCS Print11111115: 2011111111122222223: blablablaNot Found
思路:此题看起来十分麻烦,但是需要仔细分析后思路会更加清晰。 学会利用map 和set的特性,以及二者的组合,比如说map<string,set<int> >一定要记住此处有个空格,不然C-free的编译器通不过,其中访问set时需要用迭代器并且只能通过迭代器进行访问,插入时需要用insert
1 #include<cstdio> 2 #include<iostream> 3 #include<string> 4 #include<map> 5 #include<set> 6 #include<algorithm> 7 using namespace std; 8 const int MAX=1010; 9 void Query(map<string,set<int> > &mp,string &good)10 {11 if(mp.find(good)==mp.end())12 printf("Not Found\n");13 else14 {15 for(set<int>::iterator it = mp[good].begin();it!=mp[good].end();it++)16 {17 printf("%07d\n",*it);18 }19 } 20 21 }22 23 int main()24 { 25 set<int> ans;26 map<string,set<int> > mpTitle,mpAuthor,mpKey,mpPub,mpYear; //需要有空格 27 int N;28 scanf("%d",&N);29 int count=0; //记录key words 的过度映射 30 while(N--)31 {32 int Id;33 string title,author,keywords,publisher,years;34 scanf("%d",&Id); //Id35 char c=getchar(); //!!!!!!接受掉后面的换行 36 getline(cin,title); //book title37 mpTitle[title].insert(Id);38 getline(cin,author); //author39 mpAuthor[author].insert(Id);40 string good;41 while(cin>>good) //因为cin遇到空格符号,或者回车符号截止 42 {43 mpKey[good].insert(Id);44 char ch=getchar();45 if(ch==‘\n‘)46 break;47 }48 getline(cin,publisher);49 mpPub[publisher].insert(Id);50 getline(cin,years);51 mpYear[years].insert(Id); 52 }53 scanf("%d",&N);54 while(N--)55 {56 int type;57 scanf("%d: ",&type);58 printf("%d: ",type);59 string good;60 getline(cin,good); 61 cout<<good<<endl;62 switch(type)63 {64 case 1:Query(mpTitle,good);break;65 case 2:Query(mpAuthor,good);break;66 case 3:Query(mpKey,good);break;67 case 4:Query(mpPub,good);break;68 case 5:Query(mpYear,good);break;69 } 70 } 71 return 0;72 }
PAT1022. Digital Library (30)