问题 D: 摘果子
题目描述
果园里一共有n 个果子,每个果子的重量 ai都是已知的。
果园的主人喜欢收集 “最萌重量差” 的果子,现聘请你来帮他完成这一任务。
所谓 “最萌重量差” 的果子,满足如下要求:
它们是 n个果子中任意的2 个果子组成的一对
这2 个果子的重量之差是所有 “任意两两组合” 中差值最大的
“最萌重量差” 的果子可能不只一组,但同一个果子不能同时出现在多个组合中。
输入
第一行n ,表示果子的种数。
第二行n 个数,表示每个果子的重量 ai。
输出
输出若干行,每行一种 ”最萌重量差“ 果子的组合,重量小的在前。
两数之间用 1个空格隔开。
样例输入 Copy
【样例输入1】
7
1 3 5 2 7 9 10
【样例输入2】
10
1 3 5 2 7 9 12 5 13 1
样例输出 Copy
【样例输出1】
1 10
【样例输出1】
1 13
提示
对于100% 的数据:2<=n<=105,0<=ai<=1000000000 。
题解
任意两两最大,同时选取了之后不能出现在其他组,就注定了我们要排序取最大-最小计为max(sort一下)
因为不一定只有一组,所以左右缩进1位判断右-左是否还为max,是的话输出,一直循环;不是的话break;
代码(AC)
点击查看代码
#include <bits/stdc++.h>
#include<iostream>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
int flag=0;
for(int i=0;i<n;i++)
{
printf("%d %d\n",a[i],a[n-i-1]);
if(a[i+1]!=a[i]||a[n-i-2]!=a[n-i-1]) break;
}
}
return 0;
}