1.题目链接:烦恼的高考
2.题目大意:
根据 nn 位学生的估分情况,分别给每位学生推荐一所学校,要求学校的预计分数线和学生的估分相差最小(可高可低,毕竟是估分嘛),这个最小值为不满意度。求所有学生不满意度和的最小值。
3.输入输出及其样例
4.思路
采用 贪心,拿不到满分,必定会超时,所以这里我们采用二分法,大大降低事件复杂度。
5.参考代码
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int m, n;
cin >> m >> n;
int* school = new int[m+1];
int grade, sum = 0, i, j;
int right, left, mid, a, b, min = 0;
for (int i =0; i < m; i++)
{
cin >> school[i];
}
sort(school, school + m);
for (j = 1; j <=n; j++)
{
cin >> grade;
left = 0;
right = m-1;
mid = (right + left) / 2;
while (right - left != 1)
{
if (school[mid] >= grade)
{
right = mid;
}
else
{
left = mid;
}
mid = (right + left) / 2;
}
a = fabs(school[left] - grade);
b = fabs(school[right] - grade);
if (a > b)
{
min = b;
}
else
min = a;
sum += min;
}
delete[]school;
cout << sum;
return 0;
}