78792024-01-11 17:48:16ananászSorozat generáláscsharpFutási hiba 0/5029ms23272 KiB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace talalkozas
{
    class Program
    {
        static void Main(string[] args)
        {
            long N = int.Parse(Console.ReadLine());
            long fele = N / 2;
            long utolsotav = 0;
            if (N % 2 == 1)
            {
                fele++;
            }
            long[] tavozott = new long[100000];
            long[] erkezett = new long[100000];
            for (int i = 0; i < N; i++)
            {
                string[] st = Console.ReadLine().Split();
                long erk = int.Parse(st[0]) - 1;
                long tav = int.Parse(st[1]);
                if (tav < 99999)
                {
                    tavozott[tav]--;
                    if (tav>utolsotav)
                    {
                        utolsotav = tav;
                    }
                }
                erkezett[erk]++;
            }
            long[] idopontok = new long[utolsotav];
            idopontok[0] = erkezett[0] + tavozott[0];
            for (int i = 1; i < utolsotav; i++)
            {
                idopontok[i] = idopontok[i - 1] + erkezett[i] + tavozott[i];
            }
            //1. távozáskor mennyien voltak?
            long id = 0;
            while (tavozott[id] == 0 && idopontok[id] < fele)
            {
                id++;
            }
            if (idopontok[id] >= fele)//ha egy időpontban elérték
            {
                Console.WriteLine(1);
                Console.WriteLine(id + 1);
            }
            else //itt az id az első távozás ideje
            {
                long hossz = 1;
                long akt = idopontok[id - 1];
                long elozotav = id + 1;//az első távozás utáni index
                while (akt < fele)
                {
                    hossz++;
                    akt += erkezett[id];
                    id++;
                }
                id--;
                long minid = id;
                long min = hossz;

                while (elozotav < utolsotav)
                {
                    id = elozotav;
                    while (tavozott[id] == 0 && idopontok[id] < fele)
                    {
                        id++;
                    }
                    if (idopontok[id] >= fele)
                    {
                        Console.WriteLine(1);
                        Console.WriteLine(id + 1);
                        break;
                    }
                    elozotav = id + 1;
                    hossz = 1;
                    akt = idopontok[id - 1];
                    while (id < utolsotav && akt < fele && hossz <= min)
                    {

                        akt += erkezett[id];
                        hossz++;
                        id++;
                    }
                    if (akt >= fele && hossz < min)
                    {
                        min = hossz;
                        minid = id - 1;
                    }
                }
                Console.WriteLine(min);
                Console.WriteLine($"{minid - min + 2} {minid + 1}");
            }
            Console.ReadKey();
        }
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/50
1Futási hiba0/028ms20060 KiB
2Futási hiba0/029ms20760 KiB
3Futási hiba0/228ms21080 KiB
4Futási hiba0/228ms21340 KiB
5Futási hiba0/228ms21416 KiB
6Futási hiba0/228ms21704 KiB
7Futási hiba0/228ms22376 KiB
8Futási hiba0/428ms22192 KiB
9Futási hiba0/428ms22664 KiB
10Futási hiba0/428ms22536 KiB
11Futási hiba0/428ms22476 KiB
12Futási hiba0/429ms22600 KiB
13Futási hiba0/429ms22580 KiB
14Futási hiba0/428ms22572 KiB
15Futási hiba0/428ms23272 KiB
16Futási hiba0/429ms23128 KiB
17Futási hiba0/428ms23212 KiB