[PAT]クラス1052リンクリスト並べ替え(25点)

質問の意味:

正の整数N(<= 100000)、及びリストの先頭のノードアドレスを入力します。次に、N個の入力ラインは、各ノードの値(-1e5〜1E5)アドレスを含む、ノードは、アドレスが次のノードを指し、記憶されています。5つの先頭のゼロによるアドレスは、正の整数のコンポーネントが含まれています。ヘッドノードアドレスリストは、ノードの各ノードの値と点の次の出力行アドレスのアドレスに続く昇順に、この長さおよびソーティングにより得られた値の後の最初のノードのリストをリンクされ始めます。

騙す:

カジュアル作業はポジティブN 4つのデータポイントを言うが、データN == 0、いくつかの困惑N == 0を含めるかどうか、それは使用すべきではありません非負N.がありました

図1は、データポイントが最初のノードリスト内の一部のノードではない含みます。(カジュアルワーキングUnicom社のリストに言った、いくつかの実用的なポイントはリストに記載されていないがあるかもしれません)

いくつかのトリックで見た問題のいくつかは唯一のいくつかのケースは、より多くの配慮をするための独自のニーズに発生する可能性のあるいくつかの境界条件と問題がある起こらないことを保証するために、幹でカジュアルな作業与え明らかにされていません。

コード:

#define HAVE_STRUCT_TIMESPEC
する#include <ビット/ STDC ++ H>
使用して名前空間std。
対<整数、整数> PR [100007]。
対<整数、整数> ANS [100007]。
メインINT(){
int型のn;
int型追加します。
scanf関数( "%d個の%のD"、&N、&追加)。
以下のために(; iは= N <; I = int型1 ++ I){
int型X、Y、Z。
scanf関数( "%D%D%D"、およびX&Y、およびZ)。
PR [X] = {Y、Z}。
}
int型のCNT = 0。
(1)一方、{
{(Prが.second [追加])場合に
1次回[追加] ANS [++ CNT] 1次回= PR。
ANS [CNT] .second =加えます。
= PR [追加] .secondを加えます。
}
他に
ブレーク。
}
(!CNT)の場合
のprintf( "0 -1");
他{
ソート(ANS + 1、ANS + 1 + CNT)。
printf(」
以下のために(INT i = 1; iが= CNTを<; ++ I){
のprintf( "%05D%のD"、ANS [I] .second、ANS [i]が1次回)。
IF(!I = CNT)
のprintf( "N \%05D"、ANS [I + 1] .second)。

のprintf( " - 1");
}
}
0を返します。
}

おすすめ

転載: www.cnblogs.com/ldudxy/p/11619280.html