#26803: [Python]參考套件more_itertools.grouper的作法


406490150@gms.tku.edu.tw (我是朱朱)

School : 國立交通大學
ID : 139794
IP address : [140.113.236.122]
Last Login :
2021-10-14 15:49:00
f374. 分組 Grouping -- TOI 練習賽202010新手組2 | From: [1.172.232.244] | Post Date : 2021-08-25 17:02

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

 

more_itertools.grouper

 

這題要把 戰鬥力P 反著做,加一個反轉即可

grouper(reversed(戰鬥力P), n, fillvalue=0)

 

包裝成解答的樣子可能會想用enumerate(grouper(),start=1),但套用max上去,找出來的答案會是組別較小的(題目要組別越大越好)

換個方式包就比較沒這個困擾,例如zip(grouper(), count(1))。把戰鬥力放前面,組別會自己找最大的,count也在itertools裡面

 

總結起來大概長這樣

戰鬥力, 組別 = max(zip(grouper(reversed(戰鬥力P), n, fillvalue=0), count(1)))

print(組別, 戰鬥力)  # 在輸出的時候,自己將兩個組別戰鬥力互換就會是題目的要求了

 
ZeroJudge Forum