liulingbo918:
开始的时候我也是开了一半的数字,但排序时用了基数排序,结果超时,这是一定的。然后看了师兄的思路,我直接用优先队列来做,代码如下,但第一个案例就错了。我想不明白师兄的 printf( "%.1f\n", N % 2 == 1 ? (float)data[ 0 ]: ( (float)data[ 0 ] + max( data[ 1 ], data[ 2 ] ) ) / 2 ), 为什么要用到data[2], 偶数的时候不是只用到data[0]和data[1]吗?恳请指教!
#include
#include
#include
#include
using namespace std;
int main(){
int N, i, j, size, num;
float result = 0.0;
priority_queue
scanf("%d", &N);
size = N / 2 + 1;
for(i = 0; i < size; i++){
scanf("%d", &num);
Q.push(num);
}
while(size++ < N){
scanf("%d", &num);
if(num < Q.top()){
Q.pop();
Q.push(num);
}
}
if(N % 2 == 0){
result += Q.top();
Q.pop();
result += Q.top();
result = (float)result / 2;
}
else
result = (float)Q.top();
printf("%.1f\n", result);
system("pause");
return 0;
}