- 烦恼的高考志愿
论最后一个测试点通不过(求助大佬)
- 2025-1-1 12:29:47 @
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int line[100005];
int main()
{
int m,n;
cin>>m>>n;
int t=0,k=0;
while(t<m)
{
cin>>line[t];
t++;
}
sort(line,line+t);//以上是读入和排序分数线
int sum=0;
while(k<n)
{
int num;
cin>>num;
k++;
int L=0,R=t-1;
int ans=1000;//最小的差的绝对值,初始化为一个比较大的值
while(L<=R)//终止条件
{
int mid=(L+R)/2;//取中间值判断
if(line[mid]==num)
{
ans=0;
break;//零必然为最小的所求解,所以可直接终止二分,节约时间
}
else if(line[mid]<num)
{
ans=min(ans,abs(line[mid]-num));
L=mid+1;//可能的更好的答案在右边,右移,记录当前最优解,继续搜索
}
else if(line[mid]>num)
{
ans=min(ans,abs(line[mid]-num));
R=mid-1;//可能的更好的答案在左边,左移,记录当前最优解,继续搜索
}
}
sum+=ans;
}
cout<<sum;
}
//可以运行,但是不可以通过
0 条评论
目前还没有评论...
信息
- ID
- 5736
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 98
- 已通过
- 22
- 上传者