您的位置:首页 > 其它

水_CF_567A

2015-08-06 10:31 260 查看
题意很简单就是x轴上一些点,然后叫你输出这个点与之最近和最远的距离长分别为什么

#include<iostream>
#include<cstdio>
#include<algorithm>
#define Max(a,b) (a)>(b)?(a):(b)
#define Min(a,b) (a)<(b)?(a):(b)
const int maxn = 200010;
using namespace std;
struct node
{
int num,mx,mi,id;
};
node dp[maxn];
int cmp1(node a, node b)
{
return a.num < b.num;
}
int cmp2(node a, node b)
{
return a.id < b.id;
}
int Abs(int x)
{
if(x<0)return -x;
return x;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i = 0; i < n; i++)
{
scanf("%d",&dp[i].num);
dp[i].id = i;
}
sort(dp, dp+n,cmp1);
dp[0].mx = Abs(dp[n-1].num - dp[0].num);
dp[0].mi = Abs(dp[1].num - dp[0].num);
for(int i = 1; i < n-1; i++)
{
dp[i].mi = Min(Abs(dp[i-1].num-dp[i].num),Abs(dp[i+1].num-dp[i].num));
dp[i].mx = Max(Abs(dp[0].num-dp[i].num),Abs(dp[n-1].num-dp[i].num));
}
dp[n-1].mx = dp[0].mx;
dp[n-1].mi = Abs(dp[n-1].num - dp[n-2].num);
sort(dp, dp+n,cmp2);
for(int i = 0; i < n; i++)
printf("%d %d\n",dp[i].mi, dp[i].mx);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: