7879 2024. 01. 11 17:48:16 ananász Sorozat generálás csharp Futási hiba 0/50 29ms 23272 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 Összpont Teszt Verdikt Idő Memória
base 0/50
1 Futási hiba 0/0 28ms 20060 KiB
2 Futási hiba 0/0 29ms 20760 KiB
3 Futási hiba 0/2 28ms 21080 KiB
4 Futási hiba 0/2 28ms 21340 KiB
5 Futási hiba 0/2 28ms 21416 KiB
6 Futási hiba 0/2 28ms 21704 KiB
7 Futási hiba 0/2 28ms 22376 KiB
8 Futási hiba 0/4 28ms 22192 KiB
9 Futási hiba 0/4 28ms 22664 KiB
10 Futási hiba 0/4 28ms 22536 KiB
11 Futási hiba 0/4 28ms 22476 KiB
12 Futási hiba 0/4 29ms 22600 KiB
13 Futási hiba 0/4 29ms 22580 KiB
14 Futási hiba 0/4 28ms 22572 KiB
15 Futási hiba 0/4 28ms 23272 KiB
16 Futási hiba 0/4 29ms 23128 KiB
17 Futási hiba 0/4 28ms 23212 KiB