(File IO): input:sum.in output:sum.out
时间限制: 1000 ms 空间限制: 65536 KB 具体限制
Goto ProblemSet
题目描述
给出
个数
,求两个数相加的绝对值的最小值
即求
(
不等于
) 的最小值
输入
第一行一个数
接下一行
个数
输出
一行一个数
, 两个数相加的绝对值的最小值
样例输入
5
-2 6 7 7 -8
样例输出
1
数据范围限制
• 对于
% 的数据,
。
• 对于
% 的数据,$n <= 105,-106 <= ai <= 10^6。
• 对于
% 的数据,
。
解题思路
先用每个数的绝对值作关键字排个序,再每两个相邻的数相加求最小和。
代码
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n,a[1000000],ans;
bool cmp(int x,int y)
{
return abs(x)<abs(y);
}
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1,cmp);
ans=2147483647;
for(int i=2;i<=n;i++)
{
if(abs(a[i]+a[i-1])<ans)
ans=abs(a[i]+a[i-1]);
}
printf("%d",ans);
}