priority_queueEEEE,make_heapMMMMMM,最后push_heap过了。。求大神解
|
|
同样的代码,昨天1.7s,今天4s多。。。评测机老人家心情不好啊
|
|
手写一个堆,保存较小(较大)的一半元素。输入到后一半时更新堆,使堆的大小保持在n/2,但仍保存较小的一半元素。最后堆顶的两个元素就是“较小的一半元素中最大的两个”(或“较大的一半元素中最小的两个”),求中位数很简单了。
顺便,输入后一半时先判断输入的元素是否会造成堆结构实质变化再进行更新可以快那么零点几秒。 |
|
用堆 存一半数
|
|
|
|
|
|
根据计算,2MB*1024*1024/4B=524288(个)
也就是说,理论上开一个500000的数组是可行的。 (虽然实践中会爆内存...) |
|
|
|
加了这个了内存限制,这题早就超于半星了,不会呀。。
|
|
艹
5分 #include<fstream> #include<algorithm> using namespace std; ifstream fin("median.in"); ofstream fout("median.out"); int *arr=NULL,len; int main() { int index=0; float ans; fin>>len; arr=new int[len]; for(int i=0;i<len;i++) { fin>>arr[i]; } sort(arr,arr+len); if(len%2) { index=len/2; ans=arr[index]; } else { index=len/2-1; ans=(int)(10.0*((arr[index]+arr[index+1])/2.0)+0.5)/10.0; } if(ans!=(float)(arr[index]+arr[index+1])/2) fout<<ans<<".0"; else fout<<ans; delete arr; arr=NULL; return 0; }
题目 1699 中位数
2015-10-10 16:17:26
|
|
我@!¥%#……¥%@……&*……%¥#¥……¥内存出错
题目 1699 中位数
2015-10-10 15:42:11
|
|
这肯定是抄的啊
#include<??????????> #include <cstdio> #include <algorithm> #define LOCAL using namespace std; int main() { #ifdef LOCAL freopen("median.in","r",stdin); freopen("median.out","w",stdout); #endif int N, half, i; int temp, data[ 250001 ]; scanf( "%d", &N ); half = N / 2 + 1; for ( i = 0; i < half; i++ ) scanf( "%d", &data[ i ] ); make_heap( data, data + half ); while ( i++ < N ) { scanf( "%d", &temp ); if ( temp < data[ 0 ] ) { pop_heap( data, data + half ); data[ half - 1 ] = temp; push_heap( data, data + half ); } } printf( "%.1f\n", N % 2 == 1 ? (float)data[ 0 ]: ( (float)data[ 0 ] + max( data[ 1 ], data[ 2 ] ) ) / 2 ); return 0; }
题目 1699 中位数
2015-09-10 21:33:22
|
|
输出和答案一致,但运行时错误不让过,怎么搞
题目 1699 中位数
2015-04-01 12:40:37
|
|
下的数据明明有好好输出结果啊…欧卡西……
题目 1699 中位数
2014-09-13 17:13:12
|