解題報告 Loongint 的旅行安排

2022-06-04 02:42:07 字數 2732 閱讀 9524

1. 

題目loongint的旅行安排

【description

】loongint和

mm要出去旅行,出行前規劃旅行方案時,mm給

loongint

出了乙個難題。她說,在她心中,不同的地方能給她不同的感受,而感受可以用喜愛值li

表示出來,她希望這次旅行能正好得到w

的喜愛值。為了考驗

loongint

是否愛他,她只是給了

loongint

所有的li和w

值,卻並不告訴

loongint

哪個是哪個

…loongint

手頭比較緊,只能支付去三個地方的費用,所以

loongint

必須從這些數中找出三個li

和乙個w

,並且使

w盡量的大。

loongint一心想和

mm去旅行,**有時間想這個問題,所以,交給了

hzoi

同仁的你

…【input

】輸入資料有兩組(為了防止no solution騙分j

)。對於每一組,第一行n

表示有n

個數值,接下來

n行為每個數值的大小。

【output

】兩組輸出。分別為每組的答案。如果可以找出三個l

i和乙個w

,那麼就輸出最大的

w,如果不能,就輸出

no solution

。【sample input】4

5555

4123

6【sample output

】no solution

6【hint

】對於30%

的資料,

1=對於100%

的資料,

1<=n<=1000,l

i和w都屬於[-536870911,536870911]

2. 演算法

其實這是乙個

hash ,首先將任意兩個數的和處理出來,然後用 hash 儲存這個和是否存在,這樣查詢的速度才可以滿足要求。

列舉 w ,列舉乙個 l[i] ,然後,當他們兩個的差是存在的,並且加出這個差的那兩個數中沒有你列舉的那個 l[i] ,就是答案了。

3. 注意事項

注意記錄每個和由哪兩個數加出來。

還有,此處的

hash 函式必須是那個和 mod 999983 的餘數。。。。。。因為出題人的標程是這樣的,坑爹啊!

4. **

hash (liukeke)

program liukeke;

type pointer=^rec;

rec=record

a,b,data:longint;

next:pointer;

end;

varhash:array[-999983..999983] of pointer;

num:array[0..1000] of longint;

p:pointer;

n,zu,i,j,ans:longint;

function find(x:longint):boolean;

varp:pointer;

temp:longint;

begin

temp:=x mod 999983;

p:=hash[temp];

while p<>nil do

begin

if (p^.a<>num[i])and(p^.b<>num[i])and(p^.a<>num[j])and(p^.b<>num[j])then

if p^.data=x then exit(true);

p:=p^.next;

end;

exit(false);

end;

begin

assign(input,'plan.in');reset(input);

assign(output,'plan.out');rewrite(output);

for zu:=1 to 2 do

begin

readln(n);

for i:=1 to n do

readln(num[i]);

for i:=-999983 to 999983 do

hash[i]:=nil;

for i:=1 to n do

for j:=i+1 to n do

begin

new(p);

p^.a:=num[i];

p^.b:=num[j];

p^.data:=num[i]+num[j];

p^.next:=hash[(num[i]+num[j]) mod 999983];

hash[(num[i]+num[j])mod 999983]:=p;

end;

ans:=-536870912;

for i:=1 to n do

for j:=1 to n do

if i<>j then

if find(num[i]-num[j]) and (num[i]>ans)

then ans:=num[i];

if ans<>-536870912 then

writeln(ans)

else writeln('no solution');

end;

close(input);

close(output);

end.

《商務旅行》解題報告

商務旅行 解題報告 by mps 題目描述 某首都城市的商人要經常到各城鎮去做生意,他們按自己的路線去做,目的是為了更好的節約時間。假設有n個城鎮,首都編號為1,商人從首都出發,其他各城鎮之間都有道路連線,任意兩個城鎮之間如果有直連道路,在他們之間行駛需要花費單位時間。該國公路網路發達,從首都出發能...

Block Voting 解題報告

這道題做的有點狼狽,效率不高,差一點就tle的ac了。看status裡的,ac的時間大多數都是0ms的。肯定有乙個更有效率的演算法的。下面說下我的狼狽演算法。出處 http acm.jlu.edu.cn joj showproblem.php?pid 1223 問題描述 求每個party的權值。第i...

Safebreaker 解題報告

又是吉林大學一道acm題目,題目很簡單,直接暴力解決。出處 http acm.jlu.edu.cn joj showproblem.php?pid 1718 問題描述 對乙個給定數0000 9999 根據一系列猜測,判斷這個數是否存在,存在的話,是否唯一 例如 3321,給定數 作出猜測,1223 ...