站外题求助【二分查找】—— 烦恼的高考志愿
  • 板块题目总版
  • 楼主lxt♛♛♛
  • 当前回复10
  • 已保存回复10
  • 发布时间2021/1/14 13:19
  • 上次更新2023/11/5 04:51:16
查看原帖
站外题求助【二分查找】—— 烦恼的高考志愿
352775
lxt♛♛♛楼主2021/1/14 13:19
题面:

计算机竞赛小组的蒜头君终于结束了万恶的高考,然而作为班长的他还不能闲下来,班主任给了他一个艰巨的任务:帮同学找出最合理的大学填报方案。可是蒜头君太忙了,于是他想到了同为计算机竞赛小组的你,请你帮他完成这个艰巨的任务。

根据 n 位学生的估分情况,分别给每位学生推荐一所学校,要求学校的预计分数线和学生的估分相差最小(可高可低,毕竟是估分嘛),这个最小值为不满意度。求所有学生不满意度和的最小值。

输入格式:

读入数据有三行,第一行读入两个整数m,n(1≤m,n≤10的5次方),m 表示学校数,n 表示学生数,两数之间以一个空格分隔。

第二行共有 m 个正整数,表示 m 个学校的预计录取分数,不超过 10的6次方,相邻两数之间以一个空格分隔。

第三行有 n 个正整数,表示 n 个学生的估分成绩,不超过 10的6次方,相邻两数之间以一个空格分隔。

输出格式:

输出数据有一行,为最小的不满度之和。

提示:

输出时每行末尾的多余空格,不影响答案正确性

要求使用「文件输入输出」的方式解题,输入文件为 exam.in,输出文件为 exam.out

样例输入:
4 3
513 598 567 689
500 600 550
样例输出:
32

本人代码:

#include<bits/stdc++.h>
using namespace std;

int main()
{
    freopen ("exam.in", "r", stdin);
    freopen ("exam.out", "w", stdout);
    int n, m;
    cin >> m >> n;
    int school[m], grade[n];
    for (int i = 0; i < m; i++) {
        cin >> school[i];
    }
    sort (school, school + m);
    for (int i = 0; i < n; i++) {
        cin >> grade[i];
    }
    long long uns = 0;
    for (int i = 0;i < n; i++) {
        int a = abs (grade[i] - (lower_bound (school, school + m, grade[i]) - school));
        if (lower_bound (school, school + m, grade[i]) - 1 >= 0) {
            int b = abs (grade[i] - (lower_bound (school, school + m, grade[i]) - 1 - school));
        } else {
            int b = a + 1;
        }
        if (a > b) {
            uns += b;
        } else {
            uns += a;
        }
    }
    cout << uns << endl;
    return 0;
}

我的报错:

Main.cpp: In function 'int main()':
Main.cpp:26:17: error: 'b' was not declared in this scope
         if (a > b) {
                 ^
compilation terminated due to -Wfatal-errors.

我的b在上面明明定义了,他为什么告诉我没有定义

2021/1/14 13:19
加载中...