77382024-01-10 20:03:43ananászTalálkozáscsharpTime limit exceeded 20/55300ms36472 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]--;
                    utolsotav = tav;
                }
                erkezett[erk]++;
            }
            long[] idopontok = new long[100000];
            idopontok[0] = erkezett[0] + tavozott[0];
            for (int i = 1; i < 100000; 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<100000&&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();
        }
    }
}
SubtaskSumTestVerdictTimeMemory
base20/55
1Accepted0/030ms24784 KiB
2Time limit exceeded0/0300ms11408 KiB
3Partially correct1/232ms25564 KiB
4Accepted2/230ms25572 KiB
5Accepted2/230ms25868 KiB
6Accepted2/232ms26064 KiB
7Accepted2/234ms26476 KiB
8Accepted3/332ms26424 KiB
9Accepted3/334ms26416 KiB
10Accepted3/335ms26512 KiB
11Time limit exceeded0/3266ms9032 KiB
12Time limit exceeded0/3261ms9816 KiB
13Time limit exceeded0/3277ms9840 KiB
14Time limit exceeded0/3280ms12044 KiB
15Time limit exceeded0/3268ms11808 KiB
16Time limit exceeded0/3264ms12020 KiB
17Time limit exceeded0/3264ms12328 KiB
18Time limit exceeded0/3256ms13776 KiB
19Partially correct1/3185ms36436 KiB
20Partially correct1/3180ms36472 KiB
21Time limit exceeded0/3284ms14144 KiB
22Time limit exceeded0/3284ms13968 KiB