8942022-01-25 17:22:34AbbenceTalálkozáscpp14Wrong answer 44/55298ms15548 KiB
#include <iostream>
#include <fstream>
#include <stdlib.h>

#define MAXIDO 100000
#define be cin // cin | beFajl

using namespace std;

struct elem{
    int kezd = -1;
    int veg = -1;
    elem* kov = NULL;
};

struct intervallum{
    int kezd;
    int veg;
    int hossz;
};

elem* minTomb[MAXIDO];

int comp(const void* a, const void* b)
{
    elem* p1 = (elem*)a;
//    cerr << (*p1)->veg << " ";
//    cerr << (*(elem**)a)->veg << " " << (*(elem**)b)->veg << endl;
    return (*(elem**)a)->veg - (*(elem**)b)->veg;
}

int main()
{
    ifstream beFajl;
    beFajl.open("be2.txt");
    int n;
    be >> n;
    int fele = (n%2 == 0 ? n/2 : n/2+1);

    elem* vendegek = new elem;
    elem* li = vendegek;
//    elem* minTomb[MAXIDO];

    for(int i=0; i<n; i++){
        minTomb[i] = li;
//        cerr << li << endl;
        be >> li->kezd >> li->veg;
        li->kov = new elem;
        li = li->kov;
    }
    beFajl.close();

    minTomb[n-1]->kov = NULL;

//    for(int i=0; i<n; i++){
//        cerr << minTomb[i] << " ";
//    }
//    cerr << endl;
    cerr << "SIZE " << sizeof(minTomb) << endl << &minTomb << endl;
    qsort(minTomb,n,sizeof(elem*),comp);

//    cerr << endl;
//    for(int i=0; i<n; i++){
//        cout << minTomb[i]->veg << endl;
//    }

    li = vendegek;
    intervallum ans; // megoldások
    ans.kezd = MAXIDO;
    ans.veg = 0;
    for(int j = 0; j<fele; j++){ // elsõ n/2 ember vizsgálata
        if(li->veg < ans.kezd){
            ans.kezd = li->veg;
        }
        if(li->kezd > ans.veg){
            ans.veg = li->kezd;
        }
        li = li->kov;
    }
    ans.hossz = ans.veg - ans.kezd + 1;

    int minVeg = ans.kezd; // min kereséssel kapjuk meg
    int maxKezd = ans.veg; // max kereséssel kajuk meg, minVeg <= maxKezd
    int k=1;
    while(li->kov){
        elem* lj = vendegek;
        if(lj->veg != minVeg){
            while((lj->kov)->veg != minVeg){ // egyenlő távozású emberek közül lényegtelen, hogy melyiket töröljük
                lj = lj->kov;
                // hiba?
            }
            lj->kov = (lj->kov)->kov;
        }
        else{ // 1. elem lekezelése
            vendegek = lj->kov;
        }

//        minVeg = MAXIDO;
//        lj = vendegek;
//        for(int i=0; i<fele; i++){
////        while(lj != li){ // min keresése
//            if(lj->veg < minVeg){
//                minVeg = lj->veg;
//            }
//            lj = lj->kov;
//        }

        minVeg = minTomb[k++]->veg;

        maxKezd = li->kezd; // max beállítása

        if(maxKezd <= minVeg){
            ans.hossz = 1;
            ans.kezd = maxKezd;
            ans.veg = ans.kezd;
        }
        else if(maxKezd - minVeg + 1 < ans.hossz){
            ans.kezd = minVeg;
            ans.veg = maxKezd;
            ans.hossz = ans.veg - ans.kezd + 1;
        }

        li = li->kov;
    }

    cout << ans.hossz << endl << ans.kezd << " " << ans.veg << endl;


//    li = vendegek;
//    while(li->kov){
//        cerr << li->kezd << " " << li->veg << endl;
//        li = li->kov;
//    }


    return 0;
}
SubtaskSumTestVerdictTimeMemory
base44/55
1Wrong answer0/02ms1752 KiB
2Time limit exceeded0/0298ms6604 KiB
3Partially correct1/21ms3164 KiB
4Accepted2/21ms3164 KiB
5Wrong answer0/21ms3168 KiB
6Accepted2/21ms3184 KiB
7Accepted2/21ms3188 KiB
8Accepted3/31ms3188 KiB
9Accepted3/31ms3196 KiB
10Accepted3/32ms3196 KiB
11Accepted3/36ms3704 KiB
12Accepted3/38ms4184 KiB
13Accepted3/38ms4300 KiB
14Accepted3/323ms5240 KiB
15Accepted3/316ms5476 KiB
16Accepted3/314ms5540 KiB
17Accepted3/314ms5780 KiB
18Accepted3/325ms7228 KiB
19Partially correct1/374ms14448 KiB
20Accepted3/370ms15548 KiB
21Time limit exceeded0/3286ms11908 KiB
22Time limit exceeded0/3293ms13304 KiB