P1678 烦恼的高考志愿求助!!!

P1678 烦恼的高考志愿

Markcpp13 @ 2022-07-22 13:01:15

请各位大佬看看为什么会错。 我输入样例后结果一直不出来,好像是死循环。 以下是代码。

#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int const N=100005;
int n,m,i,k,l,r,mid,temp,s,a[N];
long long ans;
int main()
{
    scanf("%d%d",&m,&n);
    for(i=1;i<=m;i++)
     scanf("%d",&a[i]);
    sort(a+1,a+m+1);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&k);
        l=1;r=n;
        while(l<r)
        {
            mid=(l+r)>>1;
            if(a[mid]==k)
            {
                temp=mid;
                break;
            }
            else if(a[mid]>k)
             r=mid;
            else l=mid;
        }
        ans+=abs(a[temp]-k);
    }
    printf("%lld",ans);
}

本人能力有限,希望回复时能说的简单点。


by Nicolay @ 2022-07-22 13:52:51

@ben090302 你可以吧l,r和mid的值输出来看一看


by ben090302 @ 2022-07-22 14:12:36

@Nicolay 问题我这个A了


by Nicolay @ 2022-07-22 14:19:52

@ben090302 我也不知道了:(

反正二分不死循环应该就是对的(瞎猜的)


by Unknown___Error @ 2022-07-22 14:21:18

@ben090302 你写的和lz的一样吗你就说,你家二分在更改区间端点时不要-1 +1吗


by Unknown___Error @ 2022-07-22 14:23:11

你自己输入的n m顺序都和lz不一样你说啥?


by lliujun @ 2022-07-23 12:26:35

@Unknown___Error

说话请友善点呀


上一页 |