考试题解

· · 题解

Source & Knowledge

2024 年 9 月语言月赛,由洛谷网校入门计划/基础计划提供。

题目大意

给定每次考试迅风和他的好朋友的得分,而迅风的得分是可以更改的,求迅风至少需要更改多少分才能令他的分数比好朋友的分数高的次数大于好朋友的分数比他的分数高的次数。

题目分析

本题考察简单综合运用。

由于要令迅风的更改的分数尽可能少,那么可以记录对于每次考试,迅风若要使自己的分数高于好朋友的分数,至少需要更改多少分,记 c_i 表示在第 i 场考试迅风所需更改的最小分数。那么可以将 c 数组按照从小到大的顺序排序,然后分别记录迅风及好朋友分数更高的次数,每次取最小的 c_i,直到迅风分数更高的次数更多为止。

Code

#include <bits/stdc++.h>
using namespace std;
int a[1005], b[1005], c[1005];

int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    for (int i = 1; i <= n; i++)
        cin >> b[i];
    for (int i = 1; i <= n; i++)
        c[i] = b[i] - a[i];
    sort(c + 1, c + n + 1);
    int x = 0, y = 0;
    for (int i = 1; i <= n; i++) {
        if (c[i] == 0)
            continue;
        if (c[i] < 0)
            x++;
        else
            y++;
    }
    int ans = 0;
    for (int i = 1; i <= n; i++) {
        if (x > y)
            break;
        if (c[i] < 0)
            continue;
        if (c[i] > 0) {
            ans += c[i];
            y--;
        }
        if (x > y)
            break;
        ans++;
        x++;
    }
    cout << ans;
}