90分,二分做法,第一个点死活过不去,求助
  • 板块P2813 母舰
  • 楼主Man_CCNU
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/11/30 08:59
  • 上次更新2023/11/3 23:14:35
查看原帖
90分,二分做法,第一个点死活过不去,求助
524191
Man_CCNU楼主2021/11/30 08:59
#include<iostream>
#include<algorithm>

using namespace std;

const int N = 1000 + 10;
long long a[N], b[N], n, m, l, r, res;
bool f[N], ff;

void find_(int val)
{
    r = n;
    while (l < r) {
        int mid = l + r >> 1;
        if (b[mid] > val) r = mid;
        else l = mid + 1;
    }
    if (b[l] <= val) {
        ff = 1;       //标记没找到能够破坏防御系统的炸弹
        return;
    }
    f[l] = 1, l++;

    return;
}
int main()
{
    //freopen("C:\\Users\\HP\\Desktop\\P2813_1.in", "r", stdin);
    cin >> m >> n;
    for (int i = 1; i <= m; i++) cin >> a[i];
    for (int i = 1; i <= n; i++) cin >> b[i];
    sort(a + 1, a + m + 1);
    sort(b + 1, b + n + 1);
    if (a[m] >= b[n] || m >= n) { cout << 0 << endl; return 0; };
    l = 1;
    for (int i = 1; i <= m; i++) {
        if (a[i] <= 0) continue;
        find_(a[i]);
        if (ff) {
            cout << 0 << endl;
            return 0;
        }
    }
    for (int i = 1; i <= n; i++) {
        if (!f[i]) res += b[i];
    }

    cout << res << endl;

    return 0;
}
2021/11/30 08:59
加载中...