PAT1 1022 Digital Library

题目链接
我的github

题目大意

一个数字图书里有很多书,书的信息:

  • 7位数ID,每本书对应一个唯一的ID
  • 书的标题(长度不超过80的字符串)
  • 作者,一个书只有一个作者(长度不超过80的字符串)
  • 关键字,每本书可以有多个关键字(每个关键字是长度不超过10的字符串)
  • 出版商(长度不超过80的字符串)
  • 出版年份(4位数,范围在 [ 1000 , 3000 ] [1000,3000] [1000,3000]
    现在给出一些读者的查询要求给出查询对应的书的ID,如果有多个书符合,以升序输出书的ID

输入

每组包含一个测试用例,每个用例第一行是一个正整数 N N N( ≤ 1 0 4 \leq 10^4 104)表示书的总量,接着有6* N N N行,表示每本书的信息。之后一行是一个正整数 M M M( ≤ 1000 \leq 1000 1000),之后是 M M M行表示每个读者的查询,查询有5种:

  1. 书的标题
  2. 作者的名字
  3. 一个关键词
  4. 出版商
  5. 出版年份

输出

对每个查询,先输出这个查询,然后输出对应的书的ID(如有多个则升序输出),如果找不到对应的书就输出Not Found

样例输入

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

样例输出

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

解析

这题直接用pythondict就可以,对每个信息都建立与ID对应的dict,之后查询时排序输出即可

def solve():
    n = eval(input())
    dictTitle = dict()
    dictAuthor = dict()
    dictKey = dict()
    dictPublisher = dict()
    dictYear = dict()
    for i in range(n):
        id = input()
        title = input()
        author = input()
        keys = input().split()
        publisher = input()
        year = input()
        if title not in dictTitle:
            dictTitle[title] = list()
        dictTitle[title].append(id)
        if author not in dictAuthor:
            dictAuthor[author] = list()
        dictAuthor[author].append(id)
        for key in keys:
            if key not in dictKey:
                dictKey[key] = list()
            dictKey[key].append(id)
        if publisher not in dictPublisher:
            dictPublisher[publisher] = list()
        dictPublisher[publisher].append(id)
        if year not in dictYear:
            dictYear[year] = list()
        dictYear[year].append(id)
    m = eval(input())
    for i in range(m):
        t, ts = input().split(':')
        ts=ts[1:]
        # print(ts)
        if t == "1":
            print("%s: %s" % (t, ts))
            if ts in dictTitle:
                dictTitle[ts].sort()
                for s in dictTitle[ts]:
                    print(s)
            else:
                print("Not Found")
        if t == "2":
            print("%s: %s" % (t, ts))
            if ts in dictAuthor:
                dictAuthor[ts].sort()
                for s in dictAuthor[ts]:
                    print(s)
            else:
                print("Not Found")
        if t == "3":
            print("%s: %s" % (t, ts))
            if ts in dictKey:
                dictKey[ts].sort()
                for s in dictKey[ts]:
                    print(s)
            else:
                print("Not Found")
        if t == "4":
            print("%s: %s" % (t, ts))
            if ts in dictPublisher:
                dictPublisher[ts].sort()
                for s in dictPublisher[ts]:
                    print(s)
            else:
                print("Not Found")
        if t == "5":
            print("%s: %s" % (t, ts))
            if ts in dictYear:
                dictYear[ts].sort()
                for s in dictYear[ts]:
                    print(s)
            else:
                print("Not Found")


if __name__ == "__main__":
    solve()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值