首页 > 代码库 > PAT1022. Digital Library (30)

PAT1022. Digital Library (30)

1022. Digital Library (30)

时间限制
1000 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

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: blablabla
Sample 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 }
View Code

 

PAT1022. Digital Library (30)