#54320: 為什麼最後會錯?


s313048@gm.hccvs.hc.edu.tw (資二2-11曾奕升)


import sys
data = sys.stdin.read()
data_line = data.splitlines()
zero_line = int(data_line[0])
if zero_line == 0 or zero_line == "0":
    sys.exit()
one_line = [int(x) for x in data_line[1].split()]
a_group = 0
final_group = []
group = one_line#one_line是最好朋友的列表
while group:
    b_group = []
    for i in range(zero_line):
        b_group.append(one_line[a_group])#將one_group存進b_group
        a_group = one_line[a_group]
        pppas = one_line[a_group]
        if b_group and pppas == b_group[0]:
            break
    final_group.append(b_group)
    group = [x for x in group if x not in b_group]
    if group != []:
        a_group = group[0]
print(len(final_group))
我前九個都正確,最後一個卻錯了,也不可能時間過長啊?
#54322: Re: 為什麼最後會錯?


pofly (不挖鼻孔有害身心健康)


其實我看不懂你在寫什麼

但我有一組可以讓你 TLE 的測資

 

50000
0 1 2 ... 49997 49998 49999

 

50000 是題目說的最大值

第二行意思是所有人都很孤僻,大家都沒朋友

預期輸出很簡單,就是 50000

 

這組測資可以讓你的 for 循環直接爆炸,因為這行

group = [x for x in group if x not in b_group]

直接讓你每次循環都要的 for 循環 50000 個元素,但最終只取一個

 

如果你覺得自己測試這組輸入很麻煩,可以在程式碼的最前面添加這一段自己測試

import sys
import io

n = 50000 # 這個數字隨便你自己改
Q = str(n) + "\n" + " ".join(map(str, range(n)))
sys.stdin = io.StringIO(Q.strip())

# 後面接你自己的程式碼,不用做任何修改

 

可以用這個網站執行: onlineGDB