description
比爾去很多地方旅遊過。他在旅遊的同時留下了很多簡短的旅行筆記。筆記的形式是這樣的:
出發地 目的地
如下面就是三條合法的note:
swimmingpool oldtree
birdsnest garage
garage swimmingpool
在某一次搬家的時候,比爾的筆記本不小心散架了。於是他的筆記的順序被完全打亂了。他想請你幫個忙,幫他把這些筆記的順序整理好,先寫的筆記在前面。幸運的是,同乙個地方比爾至多只去過一次。也就是說,在這些筆記當中,乙個地方至多出現兩次,一次作為目的地,一次作為出發地。
input
第一行是乙個整數n,表示筆記的條數。n <= 12000。接下來有n行,每行一條筆記。筆記的兩個單詞的長度都不會超過15,兩個單詞之間以乙個空格分隔。
output
輸出整理好順序的筆記.
sample input
3 swimmingpool oldtree
birdsnest garage
garage swimmingpool
sample output
birdsnest garage
garage swimmingpool
swimmingpool oldtree
data constraint
hint
【限制】
對於50%的資料,n <= 1000。
對於100%的資料,n <= 12000。
分析 看題我們知道——這是一條鏈
我用了雜湊,確定字串的編號
如果在讀入中雜湊表判斷已出現的,那麼肯定同時作為出發地和目的地出現過,那麼這個點很明顯就是中間的點
然後一遍遍歷一邊輸出即可
程式:
var
u,v:array[0..12000]of longint;
s1,s2:array[0..12000]of string;
son:array[0..60000]of longint;
hash:array[0..60000]of string;
n,s:longint;
b,p:array[0..60000]of boolean;
zfc:string;
function
locate
(s:string):longint;
varl,h,k,i:longint;
begin
l:=length(s);h:=0;k:=1;
for i:=0
to l-1
dobegin
h:=h+(ord(s[i])*k) mod
56399;
k:=k*10
mod56399;
end;
while (hash[(h+i) mod
56399]<>'')and(hash[(h+i) mod
56399]<>s) do inc(i);
exit((h+i) mod
56399);
end;
procedure
insert
(s:string);
vari:longint;
begin
i:=locate(s);
hash[i]:=s;
end;
function
member
(s:string):boolean;
vari:longint;
begin
i:=locate(s);
if hash[i]=s then
exit(true) else
exit(false);
end;
procedure
init;
varcount,i:longint;
begin
readln(n);
count:=0;
while (countdo
begin
readln(zfc);
s1[count]:=copy(zfc,1,pos(' ',zfc)-1);
s2[count]:=copy(zfc,pos(' ',zfc)+1,length(zfc)-pos(' ',zfc));
if (member(s1[count])=true) then p[locate(s1[count])]:=true
else insert(s1[count]);
if (member(s2[count])=true) then p[locate(s2[count])]:=true
else insert(s2[count]);
inc(count);
u[count]:=locate(s1[count-1]);
v[count]:=locate(s2[count-1]);
son[u[count]]:=count;
end;
for count:=0
to n-1
doif (p[locate(s1[count])]=false) then s:=locate(s1[count]);
end;
procedure
print;
vari:longint;
begin
i:=son[s];
while (i>0) do
begin
writeln(hash[u[i]],' ',hash[v[i]]);
i:=son[v[i]];
end;
end;
begin
init;
print;
end.
jzoj1520 破碎的路徑
比爾去很多地方旅遊過。他在旅遊的同時留下了很多簡短的旅行筆記。筆記的形式是這樣的 出發地 目的地 如下面就是三條合法的note swimmingpool oldtree birdsnest garage garage swimmingpool 在某一次搬家的時候,比爾的筆記本不小心散架了。於是他的筆...
破碎的砝碼問題
1.問題描述 一天商人不小心把40磅重的砝碼摔成4部分,發現4部分砝碼的重量都是整磅數,而且可以用它們稱出任意1 40之間的整數磅質量,問這四塊砝碼各重多少磅?2.該問題的數學分析 必須有1磅的砝碼,否則39磅的重量無法稱出.有了1磅的砝碼後,再加上乙個3磅的砝碼,可稱出2 4磅的重量.有了1磅和3...
破碎的砝碼問題
法國數學家梅齊亞克在它的 數學組合遊戲 中提出了這樣乙個問題 乙個商人有乙個重量為40磅的砝碼,有一天他不小心將該砝碼摔成了4塊。商人發現每塊砝碼的重量都是整磅數,而且每塊砝碼的重量各不相同,並且發現這四塊砝碼碎片可以在天平上稱出1 40磅之間的任意重量 整磅數 問這四塊砝碼碎片的重量各是多少?1 ...