题目链接:http://codeforces.com/problemset/problem/709/B
题目大意:
第一行给出两个数 n,x。第二行 输入 n 个数。
要求:从x位置遍历 n-1 个位置,使得的距离最短。
解题思路:
1.如果n==1,则一个数也不用扫描,ans=0
2.否则 将数组排序,x所在的“ 合适 ”位置有两种可能
那么可以得出结果了,假定数放在一个数组na中
第一种可能 ans1= na[n-2]-na[0] + min( abs(na[0]-x), abs(na[n-2]-x) ) //na[n-2]-na[0] =>得到一遍的距离 min( abs(na[0]-x), abs(na[n-2]-x) ) =》得到往返多余的 较近距离
第二种可能 ans2= na[n-1]-na[1] + min( abs(na[n-1]-x),abs(na[n-1]-x) ) //同上
结果: min(ans1,ans2)
AC Code:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
int na[N];
int main()
{
int n,x,i;
while(scanf("%d%d",&n,&x)!=EOF)
{
for(i=; i<n; i++)
scanf("%d",&na[i]);
if(n==)printf("0\n");
else
{
sort(na,na+n);
int ans1,ans2;
ans1=na[n-]-na[]+min(abs(na[]-x),abs(na[n-]-x));
ans2=na[n-]-na[]+min(abs(na[]-x),abs(na[n-]-x));
printf("%d\n",min(ans1,ans2));
}
}
return ;
}