题目名字
烦恼的高考志愿
https://www.luogu.com.cn/problem/P1678?contestId=147354
题意
根据 n 位学生的估分情况,分别给每位学生推荐一所学校,要求学校的预计分数线和学生的估分相差最小(可高可低,毕竟是估分嘛),这个最小值为不满意度。求所有学生不满意度和的最小值。
思路
- 二分查找,sort排序
算法一:
时间复杂度
入门
实现步骤
- 二分查找+sort排序
代码
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a[1000005];
int b[1000005];
int m,n;
long long int sum;
int main(void)
{
cin>>m>>n;
for(int i=0;i<m;i++) cin>>a[i];
for(int i=0;i<n;i++) cin>>b[i];
sort(a,a+m);
for(int i=0;i<n;i++)
{
int l=0,r=m-1;
while(l<r)
{
int mid=l+r>>1;
if(a[mid]>=b[i]) r=mid;
else l=mid+1;
}
if(a[l]==b[i]) continue;
if(b[i]<=a[0]) {
sum+=abs(b[i]-a[0]);
continue;
}
if(b[i]>=a[m-1]){
sum+=abs(b[i]-a[m-1]);
continue;
}
sum+=min(abs(b[i]-a[l]),abs(b[i]-a[l-1]));
}
cout<<sum<<endl;
return 0;
}