此題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) 編輯 收藏 引用 所屬分類:
題目分類:基礎/模擬