第M天P种食物的份数排名-局长的食物-Python2.7-2018爱奇艺秋招

  • 题目描述:
    局长有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到考点。如有其它理解,欢迎交流讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值