思路用位址做下標
查的時候直接用下標
再用乙個vector存順序弄好的鍊錶
再搞乙個node陣列放ans
開了兩個陣列 乙個vectorvector放中間結果 過度作用
mid和ans記住的都是id
mid是正常順序的 ans是亂序的
期間一直有個點不對 經過無數次的嘗試之後 。。。
md!!! 測試點3竟然是 第1個結點的位址在資料中沒有!!!沒有!!!dog…very dog
00100 1
00000 4 -1
#include
#include
using
namespace std;
struct node
;int
main()
// cout << endl;
//排序
while
(id !=-1
)//3 測試點
n = mid.
size()
;//ans出動
int a =
0, b = n -1;
int i =0;
//按題目的要求的順序
while
(a <= b)
}for
(int i =
0; i <
(i -1)
; i++
)//最後的單獨處理
printf
("%05d %d -1\n"
, ans[i -1]
, a1[ans[i -1]
].data)
;return0;
}
#include
#include
#include
#include
#include
using
namespace std;
intmain()
vectorint,
int>> v;
//先把正確的順序搞對
//往v裡加的 id和data
//next作為下乙個的索引
for(
int adr = a; adr !=-1
; adr = mp[adr]
.second)
//根據題目的排序
int s =
0, r = v.
size()
-1;while
(s < r)
//有可能是奇數
if(s == r)
cout <<
"-1\n"
;return0;
}
利用4個陣列
乙個是放資料 另外兩個是放左指標和右指標
剩下的是放拍完後的結果
#include
using
namespace std;
const
int max_n =
1e5+5;
//資料 右指標 左指標 題目順序
int v[max_n]
, n[max_n]
, p[max_n]
, a[max_n]
;int
main()
int eptr = hptr;
//雙向鍊錶
//n裡面放的是他右邊的指標
//p裡放的是他左邊的指標
for(
int j = n[eptr]
;~j; eptr = n[eptr]
, j = n[eptr]
)//現在eptr指的是最後乙個指標
// coutp[hptr]=-
1;int iptr, jptr;
for(iptr = hptr, jptr = eptr; iptr != jptr;)if
(iptr != jptr)
} a[jptr]=-
1;for(
int i = eptr;
~i; i = a[i]
)return0;
}
L2 022 重排鍊錶
給定乙個單鏈表 l1 l2 ln 1 ln,請編寫程式將鍊錶重新排列為 ln l1 ln 1 l2 例如 給定l為1 2 3 4 5 6,則輸出應該為6 1 5 2 4 3。每個輸入包含1個測試用例。每個測試用例第1行給出第1個結點的位址和結點總個數,即正整數n 105 結點的位址是5位非負整數,n...
L2 022 重排鍊錶
時間限制 500 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越給定乙個單鏈表 l1 l2 ln 1 ln,請編寫程式將鍊錶重新排列為 ln l1 ln 1 l2 例如 給定l為1 2 3 4 5 6,則輸出應該為6 1 5 2 4 3。輸入格式 ...
L2 022 重排鍊錶
l2 022 重排鍊錶 25分 給定乙個單鏈表 l 1 l 2 l n 1 l n 請編寫程式將鍊錶重新排列為 l n l 1 l n 1 l 2 例如 給定l為1 2 3 4 5 6,則輸出應該為6 1 5 2 4 3。每個輸入包含1個測試用例。每個測試用例第1行給出第1個結點的位址和結點總個數,...