#26717: [Python]用這個方法解題會不會有點太投機了呀www


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

學校 : 國立交通大學
編號 : 139794
來源 : [140.113.236.122]
最後登入時間 :
2022-09-03 11:13:16
c086. 00402 - M*A*S*H -- UVa402 | From: [1.172.227.80] | 發表日期 : 2021-08-21 15:29

首先,如果測資線上測試的時候不會過,應該是因為他的換行多了一個空格,但實際上如果你兩筆測資之間沒有換行,因為這題他是用tolerance檢測,所以不管有沒有換行都會AC。

進入正題

這題的題目敘述,讓我想到取餘數、間隔,但又不需要頭尾相連的循環,這不就是python擅長的 切片slice 嗎?!可是slice是取出想要的,但我是要丟掉,該怎麼辦呢?ㄟ~這不是有del嗎?

candidates = list(range(1, N+1))
del candidates[step-1::step]
print('peek:', candidates)

你如果自己設定一個N跟step玩玩看,應該可以知道發生了什麼事
起始位置要-1因為是0-base與1-base的差別(陣列是從0開始數,還是從1開始數)

遇到另一個問題

阿如果不小心刪太多,人數比預定可以回家的人還少怎麼辦?
我的解決方法是把要刪掉的人,先暫存起來,如果最後需要的話,就從tmp最右邊慢慢給他加回去

tmp = candidates[step-1::step]
candidates = sorted(candidates + tmp[:看少幾個人:-1])

阿所以哪裡投機

主要就是原本應該要用for迴圈,然後設立flag之類的,或是index取餘數。
沒想到Python可以用個slice跟del就解決了,有點太方便了www

 
 
ZeroJudge Forum