http://codeforces.com/problemset/problem/676/A
题意:
给定一串数字,在移动一个数字的情况,问最大值和最小值之间的距离最大可以是多少。
思路:
四种方案可以选择:
最大的移到序列两端,最小的移到序列两端,最后的四种距离存在的最大值就是答案。
AC Code:
#include<cstdio>
#include<cstring>
const int MYDD=1103;
int MAX(int x,int y) {
return x>y? x:y;
}
int main() {
int n;
while(scanf("%d",&n)!=EOF) {
// int a[MYDD];
int a;
int max=-1,min=1e9;
int locmax,locmin;
for(int j=1; j<=n; j++) {
scanf("%d",&a);
if(max<a) {
locmax=j;//最大值位置
max=a;
}
if(min>a) {
locmin=j;//最小值位置
min=a;
}
}
int max0=(locmin-locmax>0 ? locmin-locmax:locmax-locmin);//最初两者的距离
int max1=MAX(locmax-1,n-locmax);//移动最小值到两端
int max2=MAX(locmin-1,n-locmin);//移动最大值到两端
int ans=MAX(max0,max1);
ans=MAX(ans,max2);
printf("%d\n",ans);
}
return 0;
}
/*By: Shyazhut*/