終於在卡了好幾天之後想到了解決辦法,這道題給出的**並不能保證完全成功,不超時的概率大概在50%
這個問題一般解決思路如下:
獲得正序鍊錶;
根據條件反轉鍊錶;
輸出鍊錶;
**如下:
#!/usr/bin/env python
# -*-coding:utf-8 -*-
'''@file : test.py
@time : 2020/04/01 10:24:29
@author : schiller xu
@version : 1.0
@contact : [email protected]
@desc : none
'''data=
input()
.split(
)first=data[0]
n=int
(data[1]
)k=int(data[2]
)nodes=
[input()
.split(
)for i in
range
(n)]r=[
]result=
while first!=
'-1'
:for node in nodes:
if node[0]
==first:
first=node[2]
break
for i in
range(0
,n,k):if
len(r[i:i+k]
)==k:
temp=r[i:i+k]
temp.reverse(
) result+=temp
else
: result+=r[i:i+k]
break
#range(n-1)會有乙個錯誤
for i in
range
(len
(result)-1
):result[i][2
]=result[i+1]
[0]result[-1
][2]
='-1'
for r in result:
print
(" "
.format
(r))
有乙個超時
嘗試過在獲取正常鍊錶的同時進行反轉,每讀取k個正常資料進行反轉一次,但是最終的效率並沒有提高多少。
最後想到可以不反轉鍊錶,直接控制鍊錶的輸出就行。控制輸出的時候,可以用資料1-8,間隔為3自己推演下,**有點亂。
#!/usr/bin/env python
# -*-coding:utf-8 -*-
'''@file : 1025-1.py
@time : 2020/07/11 19:26:26
@author : schiller xu
@version : 1.0
@desc : none
'''import sys
first_node,n,k=sys.stdin.readline(
).split()n=
int(n)
k=int
(k)#address-data
ad=dict()
#address-next
an=dict()
r=[]#讀取資料,生成字典
for _ in
range
(n):
a,d,n=sys.stdin.readline(
).split(
) ad[a]
=f' '
an[a]
=n#獲得正序鍊錶
while first_node!=
'-1'
: first_node=an[first_node]
#按照要求輸出「反轉」鍊錶
lens=
len(r)
ind=lens//k
for i in
range
(ind-1)
:for j in
range
((i+1)
*k-1
,i*k,-1
):sys.stdout.write(f' \n'
) sys.stdout.write(f' \n'
)for j in
range
((ind)
*k-1
,(ind-1)
*k,-1)
: sys.stdout.write(f' \n'
)try
: sys.stdout.write(f' \n'
)except
: sys.stdout.write(f' -1\n'
) exit(
)for j in
range
((ind)
*k,lens-1)
: sys.stdout.write(f' \n'
)sys.stdout.write(f' -1\n'
)
有乙個程式執行399ms的沒截下來,這道題目實在是喪心病狂。 1025 反轉鍊錶
在這道題中這其實是一道偽反轉鍊錶的題目,因為每乙個節點中其實沒有儲存指標的值,所以可以使用vector reverse來配合 自己的解法 給定乙個常數k以及乙個單鏈表l,請編寫程式將l中每k個結點反轉。例如 給定l為1 2 3 4 5 6,k為3,則輸出應該為3 2 1 6 5 4 如果k為4,則輸...
1025 反轉鍊錶
1025.反轉鍊錶 給定乙個常數k以及乙個單鏈表l,請編寫程式將l中每k個結點反轉。例如 給定l為1 2 3 4 5 6,k為3,則輸出應該為3 2 1 6 5 4 如果k為4,則輸出應該為4 3 2 1 5 6,即最後不到k個元素不反轉。輸入格式 每個輸入包含1個測試用例。每個測試用例第1行給出第...
1025 反轉鍊錶
給定乙個常數 k 以及乙個單鏈表 l,請編寫程式將 l 中每 k 個結點反轉。例如 給定 l 為 1 2 3 4 5 6,k 為 3,則輸出應該為 3 2 1 6 5 4 如果 k 為 4,則輸出應該為 4 3 2 1 5 6,即最後不到 k 個元素不反轉。每個輸入包含 1 個測試用例。每個測試用例...