中间数
from CCF-CSP 2016-12-1
Time limit:1s
Memory limit:256MB
前缀和问题,先将所有数字进行从小到大排序,然后统计比它大的数和比它小的数的个数,如果个数相等,那么就是找到了,否则输出-1。
ac代码:
#include<iostream>
#include<algorithm>
using namespace std;
int n,x[1005]; //n个数,存储这些数的数组
int pre[1005],rear[1005]; //分别记录前缀小和后缀大
int main(){
cin>>n;
for(int i = 1;i <= n;++i)
cin>>x[i];
sort(x + 1,x + n + 1);
for(int i = 1;i <= n;++i) //找前缀小
if(x[i] != x[i - 1])
pre[i] = i - 1;
else
pre[i] = pre[i - 1];
for(int i = n;i >= 1;--i) //找后缀大
if(x[i] != x[i + 1])
rear[i] = n - i;
else
rear[i] = rear[i + 1];
for(int i = 1;i <= n;++i)
if(pre[i] == rear[i]){
cout<<x[i];return 0;
}
cout<<-1;
return 0;
}