最小最大和 纪中1443 桶排+枚举
Description
Alice和Bob在玩一个游戏,每一轮Bob都会给Alice两个整数A和B(1<=A,B<=100),Alice每一轮必须把目前所有的A序列和B序列中的数一一配对,每个数必须用且只使用一次,要求最大和最小。
Input
第一行一个整数N(1<=N<=100000),表示比赛的轮数。
接下来N行每行包含两个整数A和B(1<=A,B<=100),表示Bob这一轮给的两个数。
Output
输出N行,每行输出最小的最大和。
分析
又见这一对cp——Alice and Bob
但这题就比较水了。
因为两个数都不会超过100,所以可以桶。
具体见程序*n+1.
代码
var
n:longint;
x,y:longint;
ans:longint;
i,j,k:longint;
a,b,x1,y1:array[0..200] of longint;
procedure work;
var
i,j:longint;
x,y:longint;
begin
ans:=0; j:=1;
for i:=100 downto 1 do
begin
if j>100 then break;
x:=a[i];
while x>0 do
if x>=b[j]
then
begin
if (j+i>ans) {and (x<>0)} and (b[j]<>0)
then ans:=j+i;
dec(x,b[j]);
b[j]:=0;
inc(j);
end
else
begin
if (j+i>ans) {and (x<>0)} and (b[j]<>0)
then ans:=j+i;
dec(b[j],x);
x:=0;
end;
end;
end;
begin
readln(n);
for i:=1 to n do
begin
readln(x,y);
a[x]:=a[x]+1; b[y]:=b[y]+1;
x1:=a; y1:=b;
work;
writeln(ans);
a:=x1; b:=y1;
end;
end.