心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0

此题very Water。但是我一开始却只得了30分……囧。原因是错误地认为只需要交替地从首尾选择,最后再对多出来的那一个比较一下即可。十分大的错误!

以下是我的代码:

#include<stdio.h>
#define MAXN 100001
typedef __int64 Long;
void qsort(Long a[],Long begin,Long end)
{
    Long i
=begin,j=end,mid=a[(begin+end)/2],t;
    
do{
         
while(a[i]<mid) i++;
         
while(a[j]>mid) j--;
         
if(i<=j)
         
{
            t
=a[i];a[i]=a[j];a[j]=t;
            i
++;j--;
         }

    }
while(i<=j);
    
if(i<end)   qsort(a,i,end);
    
if(j>begin) qsort(a,begin,j);
}

Long Abs(Long a)
{
    
return (a>0?a:-a);
}

int main()
{
    Long n,k,i,l1,r1,l2,r2,ans,a[MAXN],b[MAXN];
    scanf(
"%I64d%I64d",&n,&k);
    
for(i=1;i<=n;i++)
      scanf(
"%I64d",&a[i]);
    
for(i=1;i<=n;i++)
      scanf(
"%I64d",&b[i]);
    qsort(a,
1,n);
    qsort(b,
1,n);
    ans
=0;
    l1
=1;r1=n;
    l2
=1;r2=n;
    
for(i=1;i<=k;i++)
    
{
       
if(Abs(a[l1]-b[r2])>=Abs(a[r1]-b[l2]))
       
{
          ans
+=Abs(a[l1]-b[r2]);
          l1
++;r2--;
       }

       
else
       
{
          ans
+=Abs(a[r1]-b[l2]);
          r1
--;l2++;
       }

    }

    printf(
"%I64d\n",ans);
return 0;
}

posted on 2010-01-06 20:01 lee1r 阅读(160) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:基础/模拟

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理