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
说话请友善点呀