最小最大和
来源:互联网 发布:淘宝达人精品帖子 编辑:程序博客网 时间:2024/05/28 05:16
Alice和Bob在玩一个游戏,每一轮Bob都会给Alice两个整数A和B(1<=A,B<=100),Alice每一轮必须把目前所有的A序列和B序列中的数一一配对,每个数必须用且只使用一次,要求最大和最小。
Input
第一行一个整数n表示回合数,接下来N行每行包含两个整数A和B(0<=A,B<=100)表示Bob这一轮给的两个数。
Output
输出N行,每行输出最小的最大和。
SampleInput
输入1:
3
2 8
3 1
1 4
输入2:
3
1 1
2 2
3 3
SampleOutput
输出1:
10
10
9
输出2:
2
3
4
DataConstraint
Hint
【样例解释】
样例1中,第一轮的A序列为{2},B序列为{8},只能是(2,8),答案为10;
第二轮A序列为{2,3},B序列{8,1},可以采用配对(2,8),(1,3),这样的配对最大的和是10,是最小的配对方案;
第三轮A序列为{2,3,1},B序列为{8,1,4}可以采用配对(2,1),(3,4),(1,8),最大的和为9,没有比这更小的配对方案。
【数据范围】
50%的数据N<=200
分析:一开始我们贪心地想到把A从大到小拍,再从小到大排序,取一项的最大值。但是我看到(1<=N<=100000),就蒙了。我又看到(1<=A,B<=100),我就决定用桶排序(多用于数据多范围小的数据排序)。如果有相同的,我们可以当做一个算。例如:
A=(1,2,2,2,3)
B=(4,1,1,1,1)
相同的1和2可以一次计算。
var
g,h,g1,h1:Array [0..111] of longint;
ans,max,n,x,y,j,k,i:longint;
begin
readln(n);
for i:=1 to n do
begin
readln(x,y);
inc(g[x]);
inc(h[y]);
j:=1; k:=100;
ans:=0; max:=0;
g1:=g;
h1:=h;
while 1=1 do
begin
while (g1[j]=0) and (j<=100) do inc(j);
if j>=100 then break;
while (h1[k]=0) and (k>0) do dec(k);
if k<=0 then break;
if g1[j]>h1[k] then
begin
max:=j+k;
if max>ans then ans:=max;
g1[j]:=g1[j]-h1[k];
dec(k);
end
else
begin
if g1[j]=h1[k] then
begin
max:=j+k;
if max>ans then ans:=max;
inc(j); dec(k);
end
else
begin
if g1[j]<h1[k] then
begin
max:=j+k;
if max>ans then ans:=max;
h1[k]:=h1[k]-g1[j];
inc(j);
end;
end;
end;
end;
writeln(ans);
end;
end.
- 最小最大和
- 最小最大和
- 查找最大和最小元素
- 最大素数和最小素数
- 最大流和最小割
- 最小公约数和最大公倍数
- 最大堆和最小堆
- 最大堆和最小堆
- 最大流和最小割
- 最大堆和最小堆
- 最小最大和 (Standard IO)
- 最小最大和 (Standard IO)
- 最大堆和最小堆
- 最小数和最大数
- 最小数和最大数
- 如何指定最大和最小堆内存
- IE中的最大最小宽度和高度
- 如何指定最大和最小堆内存
- 【NOIP2016提高A组模拟7.15】立方体
- mysql replace into,insert into ... on duplicate key
- 左右侧滑
- JS保留正数小数2位
- java模拟登录qq网站,实现一键签到等等功能
- 最小最大和
- IOS-高级动画进阶
- JavaEE之使用DOM4J和XPath对xml文档的添加,删除,查询操作
- tomcat部署
- 欢迎使用CSDN-markdown编辑器
- 【框架】Android Studio 构造属于自己的框架
- HDU 搜索 1241
- jquery不用for 或者 each ,用addClass给div添加有序号的属性
- 设计模式(五):原型模式Prototype(创建型模式)