- 题目描述:
局长有N种食物,每种食物有Ai份。每天局长会吃一份食物,或者买一份食物(即每天只能进行吃或者买其中的一种动作),这样过了M天,现在局长想知道M天后第P种食物的份数排名(从大到小,相同并列,例如3 3 2,则排名为1 1 3)。N,M,P <= 100,Ai <= 1000 - 输入描述:
第一行N M P
第二行N个数Ai
接下来M行,每行Ai或者Bi分别表示买一份食物i,吃一份食物i 输出描述:
一个答案样例输入:
3 4 2
5 3 1
B 1
A 2
A 2
A 3- 样例输出:
1 - 思路:
M种食物,种食物有Ai份,我们用字典存储食物种类(key)与份数(value)的关系,如{1: 5, 2: 3, 3: 1}。在接下来的每个输入中,判断某种食物是被买还是被吃掉,每种食物的份数如果被买,则相应的value+1,如果是被吃掉,则相应的value-1。最后,将得到的字典按照份数进行降序排序。对排序后的结果进行遍历,找到第P种食物的位置,即P种食物的份数排名。
Python2.7实现
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/9/16 10:23
# @Author : Qiankun Wang
# @File : iqiyi.py
n,m,p = map(int,raw_input().split())
Ai = map(int,raw_input().split())
mz = [i for i in range(1,n+1)]
freq = zip(mz,Ai)
# 用字典存储食物种类与份数之间的关系
freq = dict(freq)
for i in range(m):
s = raw_input().split()
if s[0] == 'A': # 某种食物被买
freq[int(s[1])] += 1
if s[0] == 'B': # 某种食物被吃掉
freq[int(s[1])] -= 1
# 将得到的字典按照份数进行降序排序
res = sorted(freq.items(),key = lambda x:x[1],reverse = True)
# 遍历字典,找到第P种食物的位置,即P种食物的份数排名
for i in range(n):
if res[i][0] == p:
print i+1
写在后面:
按照这种思路题目测试用例全部通过,不过没有get到考点。如有其它理解,欢迎交流讨论。