此题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 阅读(173)
评论(0) 编辑 收藏 引用 所属分类:
题目分类:基础/模拟