WHY WA?

题目总版

zhege122 @ 2024-11-09 11:16:31

题目

SSR现在是班级的体育委员,负责给每一组的学生分配器材。

今天的体育课是练习跳绳,SSR要负责准备跳绳的数量,每一组学生人数是不同的,并且每一组学生的练习时间也不同,同一个跳绳同一个时间只能一个人使用。

SSR不知道最少准备多少条跳绳,才能满足本节体育课的使用,作为SSR的朋友SST,请你帮助他找出结果。

INPUT

第一行输入一个整数n,表示学生的组数。

接着n行,每一行输入三个数字s, t, b(s<t),分别表示这一组开始练习的时间、结束练习的时间(此时是不练习的)、学生人数。

OUTPUT

输出为一行,表示最少要准备的跳绳数量。

样例输入1

3
4 10 1
8 13 3
2 6 2

样例输出1

4

数据范围

对于 100% 的数据:1 \le n, s, t \le 2*10^5,1 \le b \le 10^7

MY CODE

#include <bits/stdc++.h>

using namespace std;

struct event {
    int time, type, cnt;
    bool operator<(const event &other) const {
        if (time != other.time) {
            return time < other.time;
        }
        return type > other.type;
    }
};

vector<event> events;
priority_queue<int> q;

int main() {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        int s, t, b;
        scanf("%d%d%d", &s, &t, &b);
        events.push_back({s, 1, b});
        events.push_back({t, -1, b});
    }

    sort(events.begin(), events.end());

    int mx = 0;
    int curs = 0;

    for (const auto &event : events) {
        if (event.type == 1) {
            q.push(event.cnt);
            curs += event.cnt;
            mx = max(mx, curs);
        } else {
            curs -= event.cnt;
            q.pop();
        }
    }

    printf("%d\n", mx);

    return 0;
}

为啥只有20分!!!大佬们求助DEBUG


by zhang_kevin @ 2024-11-09 12:17:07

你咋贪心的?没太看懂


by zhege122 @ 2024-11-09 12:19:52

@zhang_kevin 那正确代码应该是怎样的(按照你的思路)


|