230772026-01-16 11:42:03KassayAkosBenzinkút üzemeltetés (55)cpp17Hibás válasz 37/553ms564 KiB
#include <bits/stdc++.h>
using namespace std;

struct Hely {
    int tav, hasz;
};

int main() {
    int n, k;
    cin >> n >> k;
    vector<Hely> p(n);
    for (int i = 0; i < n; i++) {
        cin >> p[i].tav >> p[i].hasz;
    }

    vector<int> maxh(n, 0);
    vector<int> honnan(n, -1); // előző benzinkút indexe

    maxh[0] = p[0].hasz;

    for (int i = 1; i < n; i++) {
        // keressük a legutolsó benzinkutat, ami legalább K km-re van
        int j = i - 1;
        while (j >= 0 && p[i].tav - p[j].tav < k) j--;

        int akthasz = p[i].hasz;
        if (j >= 0) akthasz += maxh[j];

        if (akthasz > maxh[i-1]) {
            maxh[i] = akthasz;
            honnan[i] = j;
        } else {
            maxh[i] = maxh[i-1];
            honnan[i] = -1; // i-nél nem építünk benzinkutat
        }
    }

    // maximális haszon
    int maxi = maxh[n-1];
    cout << maxi << endl;

    // visszafejtés
    vector<int> megoldas;
    int i = n - 1;
    while (i >= 0) {
        if (honnan[i] != -1 || (i == 0 && maxh[i] == p[i].hasz)) {
            megoldas.push_back(i + 1);
            i = honnan[i];
        } else {
            i--;
        }
    }

    reverse(megoldas.begin(), megoldas.end());
    cout << megoldas.size() << " ";
    for (int x : megoldas) cout << x << " ";
    cout << endl;

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base37/55
1Hibás válasz0/01ms316 KiB
2Elfogadva0/02ms316 KiB
3Elfogadva3/31ms512 KiB
4Elfogadva3/31ms316 KiB
5Hibás válasz0/31ms316 KiB
6Elfogadva3/31ms316 KiB
7Hibás válasz0/31ms316 KiB
8Elfogadva3/31ms316 KiB
9Elfogadva3/32ms316 KiB
10Elfogadva3/33ms556 KiB
11Elfogadva3/32ms508 KiB
12Elfogadva3/32ms316 KiB
13Elfogadva4/41ms316 KiB
14Elfogadva4/41ms400 KiB
15Elfogadva5/51ms316 KiB
16Hibás válasz0/61ms316 KiB
17Hibás válasz0/62ms564 KiB