34802023-02-28 12:13:59PeterSorozat generáláscsharpElfogadva 50/50240ms36080 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ÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/037ms22412 KiB
2Elfogadva0/0217ms32820 KiB
3Elfogadva2/235ms22972 KiB
4Elfogadva2/245ms25032 KiB
5Elfogadva2/246ms25448 KiB
6Elfogadva2/243ms24972 KiB
7Elfogadva2/248ms26028 KiB
8Elfogadva4/452ms27976 KiB
9Elfogadva4/475ms33268 KiB
10Elfogadva4/4131ms33672 KiB
11Elfogadva4/4119ms33764 KiB
12Elfogadva4/4150ms35212 KiB
13Elfogadva4/4195ms35684 KiB
14Elfogadva4/4212ms35736 KiB
15Elfogadva4/4240ms35528 KiB
16Elfogadva4/4219ms35852 KiB
17Elfogadva4/4222ms36080 KiB