3 条题解
-
0
#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; }
信息
- ID
- 5736
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 100
- 已通过
- 22
- 上传者