我正在尝试用 Python 解决这个问题,它的 CPU 时间限制为 1 秒,内存限制为 1024 兆字节:https ://open.kattis.com/contests/v4xrif/problems/grandpabernie
多年来,伯尼爷爷走遍了世界各地。他不再旅行那么多,但他喜欢告诉他的孙子们所有这些旅行的故事。他会告诉他们他第一次去以色列,或者第三次去希腊时的故事。
他的记忆以一种有趣的方式运作。他可以很容易地记住他第 k 次到某个特定国家的旅行,但他很难记住他是哪一年去的那次旅行。鉴于伯尼爷爷的所有旅行清单,您能否回答一些询问,询问他在哪一年第 k 次前往某个特定国家?
输入输入包括:
一行有一个整数n(1≤n≤100000),伯尼爷爷的行程次数;
n 行,每行包含一个国家的名称 s (1≤|s|≤20) 和一个整数 y (1≤y≤1000000),表示伯尼爷爷在 y 年到 s 国家的旅行;
一行一整数q(1≤q≤100000),查询次数;
q 行,每行包含一个国家的名称 s 和一个整数 k,表示第 k 次伯尼爷爷去国家 s 的查询。
每个国家/地区名称仅由英文字母表中的字母组成。还保证,对于要求第 k 次前往国家 s 的每个查询,k 至少为 1,并且不大于伯尼爷爷前往国家 s 的次数。特别是,保证伯尼爷爷至少访问过一次国家。
输出 对于伯尼爷爷第 k 次旅行到国家 s 的每个查询,输出一行包含伯尼爷爷那次旅行的年份。
样本输入 1
4
Iceland 2016
Sweden 2015
Iceland 1982
Norway 1999
3
Sweden 1
Iceland 1
Iceland 2
样本输出 1
2015
1982
2016
样本输入 2
4
Iceland 2014
Iceland 2015
Iceland 2015
Iceland 2016
4
Iceland 4
Iceland 3
Iceland 2
Iceland 1
样本输出 2
2016
2015
2015
2014
我解决这个问题的策略是创建一个字典/哈希图,以国家名称作为键,并将他到该国的日期作为值列表。然后,我将遍历每个查询并从与查询对应的字典/哈希图中获取值。
我的代码:
dates = {}
for i in range(int(input().strip())):
line = input().strip().split()
city = line[0]
year = int(line[1])
if city in dates:
dates[city].append(year)
else:
dates[city] = [year]
for i in range(int(input().strip())):
line = input().strip().split()
print(sorted(dates[line[0]])[int(line[1])-1])
可以看到,这是一个比较短的程序,但是速度还不够快。有没有办法加快速度?