Home11月24:吃鸡游戏

本文介绍了一种算法,帮助玩家在遵循学校规定的前提下,最大化逃课时间以进行游戏。通过字典或二维列表存储不同课程的时间,算法确保每门课程最多只逃两次,从而计算出整个学期可逃课的最大时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

xxx 吃鸡成瘾。为此他决定逃课吃鸡!但是学校有规定,旷课到一定次数,是不给予期末考的资格的。因此 xxx 决定每门课最多逃两次。现在告诉你,一个学期有 n 节课程,第 i节课的科目是 si​,时间为 ti​。你需要告诉 xxx 这个学期他逃课吃鸡的最大时间是多少。

Input

第一行给出一个整数n(1≤n≤10000)为该学期课程节数。接下来n行,第i+1行给出第i节课的科目si和时间ti中间用空格隔开si​由小写字母组成1≤∣si∣≤10,1≤ti≤10000。若 si=sj​则认为第i节课和第j节课是同一门课。

Output

输出xxx该学期逃课吃鸡的最大时间。

Sample Input 1

7
english 2
english 1
math 3
english 3
cook 5
eatchicken 10
cook 5

Sample Output 1

28

python思路

字典做法

  1. 可以想到使用字典,以科目作为键,以存储科目时间的子列表作为值
  2. 每输入一个科目,如果字典中已有这门科目,就把时间放到其对应的时间列表中。如果没有就在字典中添加此科目的映射。
  3. 最后遍历字典中的所有时间列表,如果列表长度大于等于3,则加上最长的两节,如果小于3,直接用sum函数求和即可
n = int(input())
d = {} #字典
for i in range(n):
    sub, time = input().split()
    if sub not in d: #如果这门课不在字典中
        d[sub] = [int(time)]
    else: #这门课已经在字典中
        d[sub].append(int(time))
ans = 0
for i in d: #遍历字典
    if len(d[i]) >= 3: #这门课的课程数大于等于3
        d[i].sort() #排序
        ans += d[i][-2] + d[i][-1]
    else: #课程数小于3
        ans += sum(d[i])
print(ans)

二维列表做法

  1. 可以想到生成两个列表,一个用于存放科目(subject)的列表l,一个用于存放时间(time)的列表m。
  2. time列表m中建立每个科目对应的子列表。遍历每一个输入的科目,如果subject列表l中已经有此科目,就把时间放到time对应的子列表中,如果没有此科目就分别在sub列表和time列表中加入科目和时间。
  3. 最后遍历time列表中的子列表,判断子列表中元素是否大于等于3。如果大于等于3,排序后取最大的两个,如果小于3,直接用sum函数。
n = int(input())
l = [] #用于存放科目
m = [] #用于存放时间
for i in range(n):
    sub, time = input().split()
    if sub not in l: #如果这门课不在l列表中
        l.append(sub)
        m.append([int(time)])
    elif sub in l: #这门课已经在l列表中
        m[l.index(sub)].append(int(time))
ans = 0
for h in m: #遍历每门科目的上课时间
    if len(h) >= 3: #这门课的课程数大于等于3
        h.sort()
        ans += h[-2] + h[-1]
    else: #课程数小于3
        ans += sum(h)
print(ans)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值