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 ...