vijos P1662 最大配对

vijos P1662 最大配对

此题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;
}

你可能感兴趣的:(vijos P1662 最大配对)