【PAT】Digital Library (30)Java实现

来源:互联网 发布:耐克官方和淘宝旗舰店 编辑:程序博客网 时间:2024/06/05 17:59

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




PAT中有一个样例会超内存,网上用Java写的太少了,如果有人有更好的解法,欢迎评论讨论。

package go.jacob.day1018;import java.util.Arrays;import java.util.Comparator;import java.util.List;import java.util.Scanner;public class Demo1 {String[] map = new String[] { "", "title", "author", "keywords", "publisher", "year" };public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();sc.nextLine();Book[] books = new Book[n];// 输入处理for (int i = 0; i < n; i++) {String ID = sc.nextLine();String title = sc.nextLine();String author = sc.nextLine();String[] keywords = sc.nextLine().split(" ");List<String> list = (List<String>) Arrays.asList(keywords);String publisher = sc.nextLine();int year = Integer.parseInt(sc.nextLine());//sc.nextLine();// 用来清除缓冲区中残留的空白符books[i] = new Book(ID, title, author, list, publisher, year);}// 以书的ID进行排序Arrays.sort(books, new Comparator<Book>() {@Overridepublic int compare(Book b1, Book b2) {return b1.ID.compareTo(b2.ID);}});int m = Integer.parseInt(sc.nextLine());String[] query = new String[m];for (int i = 0; i < m; i++) {query[i] = sc.nextLine();}for (int i = 0; i < m; i++) {solve(books, query[i]);}sc.close();}private static void solve(Book[] books, String string) {System.out.println(string);String[] strs = string.split(": ");int index = Integer.parseInt(strs[0]);boolean hasElem=false;if (index == 1) {hasElem=false;for(int i=0;i<books.length;i++){if(books[i].title.equals(strs[1])){System.out.println(books[i].ID);hasElem=true;}}}else if(index==2){hasElem=false;for(int i=0;i<books.length;i++){if(books[i].author.equals(strs[1])){System.out.println(books[i].ID);hasElem=true;}}}else if(index==3){hasElem=false;for(int i=0;i<books.length;i++){if(books[i].keywords.contains(strs[1])){System.out.println(books[i].ID);hasElem=true;}}}else if(index==4){hasElem=false;for(int i=0;i<books.length;i++){if(books[i].publisher.equals(strs[1])){System.out.println(books[i].ID);hasElem=true;}}}else if(index==5){hasElem=false;for(int i=0;i<books.length;i++){if(books[i].year.equals(Integer.parseInt(strs[1]))){System.out.println(books[i].ID);hasElem=true;}}}if(!hasElem)System.out.println("Not Found");}}class Book {String ID;String title;String author;List<String> keywords;String publisher;Integer year;public Book(String iD, String title, String author, List<String> keywords, String publisher, int year) {ID = iD;this.title = title;this.author = author;this.keywords = keywords;this.publisher = publisher;this.year = year;}@Overridepublic String toString() {return "Book [ID=" + ID + ", title=" + title + ", author=" + author + ", keywords=" + keywords + ", publisher="+ publisher + ", year=" + year + "]";}}



原创粉丝点击