ACM题目(求中位数)

ACM题目(求中位数),第1张

#include<stdioh>
#include<mathh>
/==================================================\
| 取第个元素
k | k=0n-1,平均复杂度O(n) 注意a[]中的顺序被改变
\==================================================/
#define _cp(a,b) ((a)<(b))
typedef int elem_t;
elem_t kth_element(int n,elem_t a,int k){// a[0…n-1]
elem_t t,key;
int l=0,r=n-1,i,j;
while (l<r){
for (key=a[((i=l-1)+(j=r+1))>>1];i<j;){
for (j--;_cp(key,a[j]);j--);
for (i++;_cp(a[i],key);i++);
if (i<j) t=a[i],a[i]=a[j],a[j]=t;
}
if (k>j) l=j+1;
else r=j;
}
return a[k];
}
int a[1000010];
int main(){
int t;
scanf("%d",&t);
for(int n=1;n<=t;n++)
{
int num;
double mid;
scanf("%d",&num);
for(int j=0;j<num;j++)
{
scanf("%lf",&a[j]);
}
if(num%2==1)
mid=kth_element(n,a,(num+1)/2-1);
else  mid=(kth_element(n,a,(num/2)-1)+kth_element(n,a,(num/2)))/20;
printf("%1lf",mid);
}
return 0;
}

试试这段代码,欢迎交流。

C风格的语言大概是这样
int n;
while((scanf("%d",&n))==1){
int a[6][6];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&a[i][j])
}

感觉你理解错题意了,只有干了一个room以后,才能去干后面的room,不能跳过room的
所以不存在第一个房间派不派士兵的两种情况,因为第一个房间都不派士兵的话,后面的房间就到达不了了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/13406480.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存