最小最大和 纪中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.
posted @ 2016-07-15 16:29  一个响亮的蒟蒻  阅读(197)  评论(0编辑  收藏  举报