72202024-01-03 18:37:22czitaA lehető legkevesebb átszállás (50 pont)csharpHibás válasz 2/5046ms29076 KiB
using System;
using System.Collections.Generic;


namespace átszállás
{
    internal class Program
    {



        static int[] be()
        {
            string[] sts = Console.ReadLine().Split(' ');
            int[] st = new int[3];
            st[1] = int.Parse(sts[1]);
            st[0] = int.Parse(sts[0]);
            return st;
        }
        static void Main(string[] args)
        {
            int[] st = be();//alapadatok beolvasása
            int N = st[1];
            int M = st[0];
            st = be();//első vonat beolvasása
            List<int[]> v = new List<int[]>();
            st[2] = 1;

            if (st[0] != 1) Console.WriteLine(-1);//nem a kezdőállomásról indul az első vonat
            else
            {
                int indulas = st[0], erkezes = st[1], vonat = 1;
                for (int i = 1; i <M; i++)
                {
                    if (indulas == st[0])//ha azonos induló állomáson vagyunk
                    {
                        if (erkezes < st[1])
                        {
                            erkezes = st[1];//az adott állomásról a legtávolabb menő vonat
                            vonat = i;
                        }
                    }
                    else//másik indulló állomáson vagyunk
                    {
                        int[] t = new int[3];//az előző leghosszabb adatait rögzítjük
                        t[0] = indulas;
                        t[1] = erkezes;
                        t[2] = vonat;
                        v.Add(t);//beteszük egy listába
                        indulas = st[0];//a következő indulásnál keressük a legtávolabbi érkezést
                        erkezes = st[1];
                        vonat = i;

                    }
                    be();
                }
                int[] t2 = new int[3];//az előző leghosszabb adatait rögzítjük
                t2[0] = indulas;
                t2[1] = erkezes;
                t2[2] = vonat;
                v.Add(t2);
                int[] t1 = new int[3];
                t1[0] = indulas;
                t1[1] = erkezes;
                t1[2] = vonat;
                v.Add(t1);
                //belső intervallumok kizárása
                List<int[]> v2 = new List<int[]>();
                v2.Add(v[0]);
                erkezes = v[0][1];
                foreach (var item in v)
                {
                    if (item[1] > erkezes)
                    {
                        v2.Add(item);
                        erkezes = item[1];
                    }
                }
                //a legkedvezőbb intevallumok kiváasztása
                
                List<int[]> v3 = new List<int[]>();
                if (v2.Count == 1)
                {
                    v3.Add(v2[0]);
                }
                else
                {
                    v3.Add(v2[0]);
                    erkezes = v2[0][1];
                    int maxi = 1;
                    for (int i = 1; i < v2.Count; i++)
                    {
                        if (v2[i][0] <= erkezes)
                        {
                            if (v2[i][1] > v2[maxi][1])
                            {
                                maxi = i;
                            }
                        }
                        else
                        {
                            v3.Add(v2[maxi]);
                            erkezes = v2[maxi][1];
                            maxi = i;
                        }
                    }
                    v3.Add(v2[maxi]);
                }
                //van e átfedés
                int cv = 1;
                while (cv < v3.Count && v3[cv][0] <= v3[cv - 1][1])
                {
                    cv++;
                }
                if (cv < v3.Count||v3[v3.Count-1][1]!=N)
                {
                    Console.WriteLine(-1);
                }
                else
                {
                    Console.WriteLine(v3.Count - 1);
                    foreach (var item in v3)
                    {
                        Console.Write(item[2] + " ");
                    }
                    Console.WriteLine();
                }
            }

            Console.ReadKey();
        }
    }
}


RészfeladatÖsszpontTesztVerdiktIdőMemória
base2/50
1Hibás válasz0/028ms21280 KiB
2Hibás válasz0/043ms25652 KiB
3Elfogadva1/128ms21628 KiB
4Elfogadva1/128ms21984 KiB
5Hibás válasz0/228ms21888 KiB
6Hibás válasz0/228ms22384 KiB
7Hibás válasz0/229ms22768 KiB
8Hibás válasz0/230ms23304 KiB
9Hibás válasz0/232ms23720 KiB
10Hibás válasz0/235ms24676 KiB
11Hibás válasz0/235ms25304 KiB
12Hibás válasz0/239ms25932 KiB
13Hibás válasz0/232ms24700 KiB
14Hibás válasz0/232ms25144 KiB
15Hibás válasz0/234ms25000 KiB
16Hibás válasz0/237ms26400 KiB
17Hibás válasz0/239ms27552 KiB
18Hibás válasz0/241ms28360 KiB
19Hibás válasz0/241ms28452 KiB
20Hibás válasz0/241ms28400 KiB
21Hibás válasz0/246ms28756 KiB
22Hibás válasz0/243ms28756 KiB
23Hibás válasz0/243ms28756 KiB
24Hibás válasz0/243ms28932 KiB
25Hibás válasz0/243ms29076 KiB
26Hibás válasz0/243ms28968 KiB
27Hibás válasz0/245ms29024 KiB
28Hibás válasz0/245ms29060 KiB