UVA 10057 A midsummer night's dream.

UVA_10057

    首先对序列进行升序排序,如果N是奇数的话,那么A只能是中间的那个数,如果N是偶数的话,那么A可以是中间两个数所组成的区间里的任意一个整数。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int a[1000010];
int cmp(const void *_p,const void *_q)
{
int *p=(int *)_p;
int *q=(int *)_q;
return *p-*q;
}
int main()
{
int i,j,k,N,n1,n2;
while(scanf("%d",&N)==1)
{
for(i=0;i<N;i++)
scanf("%d",&a[i]);
qsort(a,N,sizeof(a[0]),cmp);
k=(N-1)/2;
n1=0;
if(N%2!=0)
{
for(i=k;i>=0&&a[i]==a[k];i--)
n1++;
for(j=k+1;j<N&&a[j]==a[k];j++)
n1++;
}
else
{
for(i=k;i>=0&&a[i]==a[k];i--)
n1++;
for(j=k+1;j<N&&a[j]==a[k+1];j++)
n1++;
}
if(N%2!=0)
n2=1;
else
n2=a[k+1]-a[k]+1;
printf("%d %d %d\n",a[k],n1,n2);
}
return 0;
}


原文地址:https://www.cnblogs.com/staginner/p/2192199.html