jzoj1520 破碎的路徑

2021-08-15 02:47:12 字數 2017 閱讀 2995

比爾去很多地方旅遊過。他在旅遊的同時留下了很多簡短的旅行筆記。筆記的形式是這樣的:

出發地 目的地

如下面就是三條合法的note:

swimmingpool oldtree

birdsnest garage

garage swimmingpool

在某一次搬家的時候,比爾的筆記本不小心散架了。於是他的筆記的順序被完全打亂了。他想請你幫個忙,幫他把這些筆記的順序整理好,先寫的筆記在前面。幸運的是,同乙個地方比爾至多只去過一次。也就是說,在這些筆記當中,乙個地方至多出現兩次,一次作為目的地,一次作為出發地。

第一行是乙個整數n,表示筆記的條數。n <= 12000。接下來有n行,每行一條筆記。筆記的兩個單詞的長度都不會超過15,兩個單詞之間以乙個空格分隔。

輸出整理好順序的筆記.

3 swimmingpool oldtree

birdsnest garage

garage swimmingpool

birdsnest garage

garage swimmingpool

swimmingpool oldtree

【限制】

對於50%的資料,n <= 1000。

對於100%的資料,n <= 12000。

演算法討論

二分+排序。把出發點陣列a和目的地陣列b分別排序,排序時連同a的日記編號一同排序,如果a[i]在b中沒有出現,那麼就是起點,s[i]就是第一條,再把b[s[i]]在a中尋找,就知道下一條路線,同理重複n次。
while a[i]do inc(i);

while a[j]>t do dec(j);

if i<=j then

begin

z:=a[i];a[i]:=a[j];a[j]:=z;

c:=s[i];s[i]:=s[j];s[j]:=c;

inc(i);dec(j);

end;

until i>j;

if lthen kp(l,j);

if ithen kp(i,r);

end;

procedure

kpp(l,r:longint);

var i,j:longint;

t,z:string;

begin

i:=l;j:=r;

t:=b[(l+r) div

2]; repeat

while b[i]do inc(i);

while b[j]>t do dec(j);

if i<=j then

begin

z:=b[i];b[i]:=b[j];b[j]:=z;

inc(i);dec(j);

end;

until i>j;

if lthen kpp(l,j);

if ithen kpp(i,r);

end;

var i,j:longint;

begin

readln(n);

for i:=1

to n do

begin

readln(y[i]);

x[i]:=copy(y[i],1,pos(' ',y[i])-1);

delete(y[i],1,pos(' ',y[i]));

a[i]:=x[i];

b[i]:=y[i];

s[i]:=i;

end;

kp(1,n);

kpp(1,n);

for i:=1

to n do

if b[ef(a[i])]<>a[i] then

begin

j:=s[i];

break;

end;

for i:=1

to n do

begin

writeln(x[j],' ',y[j]);

j:=find(y[j]);

end;

end.

c語言要點摘錄(15 20)

十五.編譯過程 file.c,file.h經過預處理器處理成為file.i,再經過編譯器 gcc 成為彙編file.s,再經過彙編器 as 成為file.o,最後通過聯結器 linker 成為可執行檔案。預處理器 1.處理所有的注釋,以空格代替 2.將所有的 define刪除,並展開所有定義的巨集 ...

hihocoder 1520 古老數字

時間限制 20000ms 單點時限 2000ms 記憶體限制 256mb 小hi有一張紙條,上面寫著乙個長度為n的整數。由於年代過於久遠,其中有些位置已經看不清了,我們用 來代替這個位置。小hi印象中記得這個數字除以x的餘數為y,他想知道這個數最小可能是多少?注意這個整數的首位不能是0,除非它本身等...

HDU 1520 簡單樹形dp

題意 乙個大學要舉行職工party。為使party中每個人都玩的開心,直接上司和下屬關係的員工不能同時參加。每個人都有各自的歡樂值。問如何邀請使得總歡樂值最大。dp i 1 表示選擇i點 dp i 0 表示不選擇i點 include include include include using nam...