洛谷P1678:烦恼的高考

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值