最小最大和 紀中1443 桶優化的暴力

2021-07-14 23:45:54 字數 1114 閱讀 9982

alice和bob在玩乙個遊戲,每一輪bob都會給alice兩個整數a和b(1<=a,b<=100),alice每一輪必須把目前所有的a序列和b序列中的數一一配對,每個數必須用且只使用一次,要求最大和最小。

第一行乙個整數n(1<=n<=100000),表示比賽的輪數。

接下來n行每行包含兩個整數a和b(1<=a,b<=100),表示bob這一輪給的兩個數。

輸出n行,每行輸出最小的最大和。

[資料範圍]

50%的資料n<=200

看到n<=100000我就慫了,但是聽了題解發現果汁水四溢

因為數字的範圍很小,所以可以用兩個桶分別記錄數量,最大數和最小數配對,次大數和次小數配對,找到最大值就好了

var

a,b,c,d:array[1..100]of longint;

n,i,ans,k,j,x,y:longint;

begin

readln(n);

for i:=1

to n do

begin

readln(x,y);

inc(a[x]);

inc(b[y]);

c:=a;

d:=b;

ans:=0;

j:=100;

k:=1;

while (j>0)and(k<101) do

begin

if (a[j]>0)and(b[k]>0) then

if j+k>ans then max:=j+k;

if a[j]then

begin

b[k]:=b[k]-a[j];

dec(j);

endelse

if b[k]then

begin

a[j]:=a[j]-b[k];

inc(k);

endelse

if b[k]=a[j] then

begin

inc(k);

dec(j);

end;

end;

writeln(ans);

a:=c;

b:=d;

end;

end.

oracle 分組排序取出最大和最小的記錄

表中字段 phonenumber,score,examtime 要取出時間段中phonenumber的score最大並且examtime最小的記錄,用max和min取的值都不是正確的記錄值,用排序子查詢的方法可以取到 select phonenumber,score,examtime,scoreti...

尋找乙個陣列中的最大和最小數

有乙個求陣列中最大和最小數的題目,基本的思路是遍歷一遍陣列,然後每個乙個元素都和最大值和最小值比較,時間複雜度是2 n 1 或2n。比較簡單的一種減少複雜度的方法是把陣列的元素兩兩分組比較,然後較大的數和max比較,較小的數和min比較,這種實現方法的時間複雜度是1.5n。還有一種是採用分治法,比較...

Leetcode 所有排列中的最大和

第35場雙周賽第二題 有乙個整數陣列nums,和乙個查詢陣列requests,其中requests i starti,endi 第i個查詢求nums starti nums starti 1 nums endi 1 nums endi 的結果 starti和endi陣列索引都是 從0開始 的。你可以...