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開始 的。你可以...