*** 吃雞成癮。為此他決定逃課吃雞!但是學校有規定,曠課到一定次數,是不給予期末考的資格的。因此 *** 決定每門課最多逃兩次。現在告訴你,乙個學期有 n 節課程,第 i節課的科目是 si,時間為 ti。你需要告訴 *** 這個學期他逃課吃雞的最大時間是多少。
第一行給出乙個整數n(1≤n≤10000)為該學期課程節數。接下來n行,第i+1行給出第i節課的科目si和時間ti中間用空格隔開si由小寫字母組成1≤∣si∣≤10,1≤ti≤10000。若 si=sj則認為第i節課和第j節課是同一門課。
輸出***該學期逃課吃雞的最大時間。
7english 2
english 1
math 3
english 3
cook 5
eatchicken 10
cook 5
可以想到使用字典,以科目作為鍵,以儲存科目時間的子列表作為值
每輸入乙個科目,如果字典中已有這門科目,就把時間放到其對應的時間列表中。如果沒有就在字典中新增此科目的對映。
最後遍歷字典中的所有時間列表,如果列表長度大於等於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]
int(time)
)ans =
0for i in d:
#遍歷字典
iflen
(d[i]
)>=3:
#這門課的課程數大於等於3
d[i]
.sort(
)#排序
ans += d[i][-
2]+ d[i][-
1]else
:#課程數小於3
ans +=
sum(d[i]
)print
(ans)
可以想到生成兩個列表,乙個用於存放科目(subject)的列表l,乙個用於存放時間(time)的列表m。
time列表m中建立每個科目對應的子列表。遍歷每乙個輸入的科目,如果subject列表l中已經有此科目,就把時間放到time對應的子列表中,如果沒有此科目就分別在sub列表和time列表中加入科目和時間。
最後遍歷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列表中
[int
(time)])
elif sub in l:
#這門課已經在l列表中
m[l.index(sub)
]int
(time)
)ans =
0for h in m:
#遍歷每門科目的上課時間
iflen
(h)>=3:
#這門課的課程數大於等於3
h.sort(
) ans += h[-2
]+ h[-1
]else
:#課程數小於3
ans +=
sum(h)
print
(ans)
11月24日總結
ipython支援 tab 鍵自動補全列名與公共屬性。下面是部分可自動補全的屬性 in 12 df2.noqa e225,e999 df2.a df2.bool df2.abs df2.boxplot df2.add df2.c df2.add prefix df2.clip df2.add suf...
失業日記 11月24日
11月24日 晴 周二 11點多就跟april出門,今天有好幾個事情要處理,首先要去保險公司交下一年的車險。其實還要去買蔬菜和水果,家裡什麼蔬菜和水果都沒有了。最後還要在接amiee的時候去交學費,amiee學校的學費很有意思,你可以分期付款,乙個月交,甚至可以上完乙個月等家裡收到郵局送過來的賬單再...
遞迴2023年11月24日
遞迴2018年11月24日 以下內容僅供娛樂,歡迎隨時 請多指教!1 用遞迴函式求斐波那契數列的第n項 斐波那契數列從第三個數起,後乙個數等於前面兩個數之和,例如 1 1 2 3 5 8 13 21 34 include intfun int n intmain 2 猴子吃桃問題 有一群猴子,去摘了...