3480 2023. 02. 28 12:13:59 Peter Sorozat generálás csharp Elfogadva 50/50 240ms 36080 KiB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;

namespace sorozatgeneralas
{
    internal class Program
    {
        static int lepesek(long sorozateleme, int A, int B, int M)
        {
            sorozateleme = sorozateleme * A + B;
            string s = sorozateleme.ToString();
           
             s = new string('0', M*4- sorozateleme.ToString().Length)+sorozateleme.ToString(); //Zárójelben: mit adunk hozzá és hányat.
            

            return int.Parse(s.Substring(M, M * 2));
        }

        /*
         // Nem adtunk be adatot, ezért nem jó a sortolás
        static int[] adat1, adat2, adat3; //Ezek szerint sortolunk

        static int Comp(int a, int b)
        {
            if (adat1[a] == adat1[b])
            {
                if (adat2[a] == adat2[b])
                {
                    if (adat3[a] == adat3[b])
                    {
                        return 0;
                    }
                    return (adat3[a] < adat3[b] ? 1 : -1);
                }
                return (adat2[a] < adat2[b] ? 1 : -1);
            }
            return (adat1[a] < adat1[b] ? 1 : -1); //Bal oldalt true (1), jobb oldaon -1; ternary operator

        }
        /*
        */
        
        static void Main(string[] args)
        {
            /*
            // adatokat feltolteni
            int n = 5;
            int[] indexek = new int[n];
            for (int i = 0; i < n; i++)
            {
                indexek[i] = i;
            }
            Array.Sort(indexek, Comp); //Mit sortolunk és milyen függvény alapján
            */
        
            int[] st = Console.ReadLine().Split().Select(int.Parse).ToArray();
            int M = st[0]; //2*M jegyű pozitív számból indulunk ki és 4*M jegyűt kell majd kapnunk
            int X = st[1]; //Kezdőszám
            int A = st[2]; //számolunk vele
            int B = st[3]; //Számolunk vele
            int N = st[4]; //Ennyiszer hajtjuk végre a lépéseket
            int K = st[5]; //A K. legnagyobb elemre vagyunk kíváncsiak

            //Feldolgozás:
            int mostszamolt;
            mostszamolt = X;
            List<int> sorozatelemei = new List<int>();
            int sorozateleme = X;
            for (int i = 0; i < N; i++)
            {
                sorozateleme=lepesek(sorozateleme,A,B,M);
                sorozatelemei.Add(sorozateleme);
            }

            //két egyforma elem távolsága

            Dictionary<int, int> volt = new Dictionary<int, int>();
            int ismetodesszam=0;
            for (int i = 0; i < N; i++)
            {
                if (volt.ContainsKey(sorozatelemei[i]))
                {
                    ismetodesszam = i - volt[sorozatelemei[i]]; //A legelső ismétlődésnek megjegyzi a távolságát
                    break;
                }
                volt.Add(sorozatelemei[i], i);

            }
            Console.WriteLine(ismetodesszam);





            //K. legnagyobb elem

            //sorting:
            sorozatelemei.Sort();
            Console.WriteLine(sorozatelemei[N-K]);
            Console.ReadKey();


        }
    }
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 37ms 22412 KiB
2 Elfogadva 0/0 217ms 32820 KiB
3 Elfogadva 2/2 35ms 22972 KiB
4 Elfogadva 2/2 45ms 25032 KiB
5 Elfogadva 2/2 46ms 25448 KiB
6 Elfogadva 2/2 43ms 24972 KiB
7 Elfogadva 2/2 48ms 26028 KiB
8 Elfogadva 4/4 52ms 27976 KiB
9 Elfogadva 4/4 75ms 33268 KiB
10 Elfogadva 4/4 131ms 33672 KiB
11 Elfogadva 4/4 119ms 33764 KiB
12 Elfogadva 4/4 150ms 35212 KiB
13 Elfogadva 4/4 195ms 35684 KiB
14 Elfogadva 4/4 212ms 35736 KiB
15 Elfogadva 4/4 240ms 35528 KiB
16 Elfogadva 4/4 219ms 35852 KiB
17 Elfogadva 4/4 222ms 36080 KiB