Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

注意溢出

Posted by semiconductor at 2005-10-02 21:27:23 on Problem 2623
In Reply To:兄弟们帮帮忙 到底哪里出错了。。。。。。(代码见内) Posted by:wahahaha at 2005-10-02 20:52:34
> #include <stdio.h>
> #define N 2500
> long int a[N];
> long int findmin(long l,long r)
> {
>    long int result=l,i,tmp;
>    for(i=l+1;i<=r;i++)
>      if(a[result]>a[i])
> 	 result=i;
>   tmp=a[l];
>   a[l]=a[result];
>   a[result]=tmp;
>   return a[l];
> 
> 
> }
> long int findmax(long l,long r)
> {
>   long int result=l,i,tmp;
>    for(i=l+1;i<=r;i++)
>      if(a[result]<a[i])
> 	 result=i;
>   tmp=a[l];
>   a[l]=a[result];
>   a[result]=tmp;
>   return a[l];
> }
> long int find(long l,long r,long pos)
> {
>     long i=l-1,j=r+1,tmp,tmp2;
>        
>     if(pos==l)return findmin(l,r);
>     if(pos==r)return findmax(l,r);
>     tmp=a[l];
>     while(i<j)
>     {
>         while(a[++i]<tmp);
> 	while(a[--j]>tmp);
>         if(i<j)
>         {
>             tmp2=a[i];
>             a[i]=a[j];
>             a[j]=tmp2;
>         }
>     }
>     if(j>=pos)return find(l,j,pos);
>     else return find(j+1,r,pos);
> }
> int main()
> {
>    long int n,mid,i;
>     double result; 
>    scanf("%ld",&n);
>    for(i=1;i<=n;i++)
>       scanf("%ld",&a[i]);
>    mid=(n+1)/2;
>    if(n%2==1)
>      printf("%ld\n",find(1,n,mid));
>    else
>    {
>      result=find(1,n,mid)+findmin(mid+1,n);
>      result/=2.0;
>      printf("%.1lf\n",result);
>    }
>    return 0;
> }
> 
> 
> 
> 
> 

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator