219302026-01-14 10:37:44badamTalálkozáscpp17Időlimit túllépés 4/55300ms1860 KiB
#include <iostream>
#include <vector>

using namespace std;

struct ember {
    int erkezes, tavozas;
};

bool benne_van(int a, int b, int c, int d) {
    return (max(a, c) <= min(b, d));
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int n;
    cin >> n;
    vector<ember> t(n);

    int kezdetiidopont = 2000000;
    int vegsoidopont = 0;

    for(int i=0; i<n; i++) {
        cin >> t[i].erkezes >> t[i].tavozas;
        if(t[i].erkezes < kezdetiidopont) kezdetiidopont = t[i].erkezes;
        if(t[i].tavozas > vegsoidopont) vegsoidopont = t[i].tavozas;
    }

    vector<int> v;
    for(int i=kezdetiidopont; i<=vegsoidopont; i++) v.push_back(i);

    int min_hossz = 2000000;
    int min_kezdet = -1;
    int min_veg = -1;
    bool tudtunk_varni = true;

    while(tudtunk_varni && !v.empty())
    {
        tudtunk_varni = false;

        int akt_kezdet = v.front();
        int akt_veg = v.back();
        int szamlalo = 0;
        for(int i=0; i<n; i++) {
            if(benne_van(t[i].erkezes, t[i].tavozas, akt_kezdet, akt_veg)) {
                szamlalo++;
            }
        }
        if(szamlalo >= (n+1)/2) {
            if((int)v.size() < min_hossz) {
                min_hossz = v.size();
                min_kezdet = akt_kezdet;
                min_veg = akt_veg;
            }
        } else {

            break;
        }
        if(v.size() > 1) {
            int proba_kezdet = *(v.begin() + 1);
            int proba_szamlalo = 0;
            for(int i=0; i<n; i++) {
                if(benne_van(t[i].erkezes, t[i].tavozas, proba_kezdet, akt_veg)) {
                    proba_szamlalo++;
                }
            }
            if(proba_szamlalo >= (n+1)/2) {
                v.erase(v.begin());
                tudtunk_varni = true;
                continue;
            }
        }
        if(v.size() > 1) {
            int proba_veg = *(v.end() - 2);
            int proba_szamlalo = 0;

            for(int i=0; i<n; i++) {
                if(benne_van(t[i].erkezes, t[i].tavozas, akt_kezdet, proba_veg)) {
                    proba_szamlalo++;
                }
            }

            if(proba_szamlalo >= (n+1)/2) {
                v.pop_back();
                tudtunk_varni = true;
                continue;
            }
        }
    }

    cout << min_hossz << endl;
    cout << min_kezdet << " " << min_veg << endl;

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base4/55
1Elfogadva0/01ms508 KiB
2Időlimit túllépés0/0284ms1716 KiB
3Részben helyes1/21ms316 KiB
4Részben helyes1/21ms316 KiB
5Elfogadva2/21ms316 KiB
6Hibás válasz0/23ms316 KiB
7Hibás válasz0/24ms316 KiB
8Hibás válasz0/32ms476 KiB
9Hibás válasz0/37ms316 KiB
10Hibás válasz0/38ms316 KiB
11Időlimit túllépés0/3300ms728 KiB
12Időlimit túllépés0/3300ms752 KiB
13Időlimit túllépés0/3300ms820 KiB
14Időlimit túllépés0/3286ms820 KiB
15Időlimit túllépés0/3282ms820 KiB
16Időlimit túllépés0/3300ms820 KiB
17Időlimit túllépés0/3300ms824 KiB
18Időlimit túllépés0/3282ms1204 KiB
19Időlimit túllépés0/3289ms1716 KiB
20Időlimit túllépés0/3300ms1856 KiB
21Időlimit túllépés0/3300ms1860 KiB
22Időlimit túllépés0/3284ms1716 KiB