最小最大和 (Standard IO)

Description

  Alice和Bob在玩一个游戏,每一轮Bob都会给Alice两个整数A和B(1<=A,B<=100),Alice每一轮必须把目前所有的A序列和B序列中的数一一配对,每个数必须用且只使用一次,要求最大和最小。

题解

数值大小比较小,用一个数组统计,再用桶优化,暴力~~没了。

代码

var
 i,j,n,max,min,ans,x,y:longint;
 a,b,p,q:array[0..110] of longint;

procedure work;
var
 i,j:longint;
begin
 ans:=0; j:=1;
 for i:=100 downto 1 do
  begin
   if j>100 then break;
   x:=p[i];
   while x>0 do
    if x>=q[j] then
     begin
      if (j+i>ans)and(x<>0)and(q[j]<>0) then ans:=j+i;
      dec(x,q[j]);
      q[j]:=0;
      inc(j);
     end else
     begin
      if (j+i>ans)and(x<>0)and(q[j]<>0) then ans:=j+i;
      dec(q[j],x);
      x:=0;
     end;
  end;
end;


procedure init;
begin
 readln(n);
 for i:=1 to n do
  begin
   readln(x,y);
   inc(a[x]); inc(b[y]);
   p:=a; q:=b;
   work;
   writeln(ans);
  end;
end;

begin

init;
close(input);
close(output);
end.

你可能感兴趣的:(2016暑假中山)