| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
为什么我的代码用C++是AC,G++却WA?#include <cstdio>
#include <cstring>
#include <cstdlib>
int maxnum[20];
int minnum[20];
__int64 sum;
int maxn,minn;
int adjust(int root,int len,int check)
{
int t,j=root<<1;
bool ck=0;
if (check==0) t=maxnum[root];
else t=minnum[root];
while (j<=len && !ck)
{
if (check==0)
{
if (j<len && maxnum[j]>maxnum[j+1]) j++;
if (t<=maxnum[j]) ck=1;
else
{
maxnum[j>>1]=maxnum[j];
j<<=1;
}
}
else
{
if (j<len && minnum[j]<minnum[j+1]) j++;
if (t>=minnum[j]) ck=1;
else
{
minnum[j>>1]=minnum[j];
j<<=1;
}
}
}
if (check==0) maxnum[j>>1]=t;
else minnum[j>>1]=t;
return 99;
}
int insert(int root,int pos,int check)
{
while (check==0 && pos/2>=root && maxnum[pos]<maxnum[pos>>1])
{
int t=maxnum[pos];
maxnum[pos]=maxnum[pos>>1];
maxnum[pos>>1]=t;
pos>>=1;
}
while (check==1 && pos/2>=root && minnum[pos]>minnum[pos>>1])
{
int t=maxnum[pos];
maxnum[pos]=maxnum[pos>>1];
maxnum[pos>>1]=t;
pos>>=1;
}
return 99;
}
int main()
{
int n1,n2,n;
while (scanf("%d%d%d",&n1,&n2,&n),n)
{
int i,num;
sum=0;
memset(maxnum,0,sizeof(maxnum));
memset(minnum,0,sizeof(minnum));
maxn=0;
minn=0;
for (i=1;i<=n;i++)
{
scanf("%d",&num);
sum+=num;
if (maxn<n1)
{
maxn++;
maxnum[maxn]=num;
insert(1,maxn,0);
}
else if (num>maxnum[1])
{
maxnum[1]=num;
adjust(1,maxn,0);
}
if (minn<n2)
{
minn++;
minnum[minn]=num;
insert(1,minn,1);
}
else if (num<minnum[1])
{
minnum[1]=num;
adjust(1,minn,1);
}
}
for (i=1;i<=maxn;i++) sum-=maxnum[i];
for (i=1;i<=minn;i++) sum-=minnum[i];
printf("%.6lf\n",double(sum)/(n-maxn-minn));
}
return 99;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator