2979 2023. 02. 06 19:04:08 CWM Sorozat generálás cpp11 Elfogadva 50/50 17ms 34536 KiB
// SorozatGen.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
#define int long long
int GenNextElement(int Base, int A, int B, int M) {
    Base = Base * A + B;
    Base %= (int)pow(10, M*3);
    Base /= (int)pow(10, M);
    return Base;
}

signed main()
{
    int M, BeginningNum, A, B, Lenght, K;
    cin >> M >> BeginningNum >> A >> B >> Lenght >> K;
    K = Lenght - K;
    vector<int> LastElementMet((int)pow(10, M*2));
    int Looplenght = 0;
    int NumbersBeforeLoopLenght = 0;
    int OG = BeginningNum;
    int OGL = Lenght;
    for (size_t i = 1; i < (int)pow(10, M*2); i++)
    {
        BeginningNum = GenNextElement(BeginningNum, A, B, M);
        if (LastElementMet[BeginningNum] == 0) {
            LastElementMet[BeginningNum] = i;
        }
        else {
            NumbersBeforeLoopLenght = LastElementMet[BeginningNum];
            Looplenght = i - LastElementMet[BeginningNum];
            break;
        }
        /*cout << BeginningNum << "\n";*/
    }
    cout << Looplenght << "\n";
    vector<int> Loop;
    for (size_t i = 0; i < Looplenght; i++)
    {
        Loop.push_back(BeginningNum);
        BeginningNum = GenNextElement(BeginningNum, A, B, M);
    }
    vector<int> CountTillLenght((int)pow(10, M*2));
    BeginningNum = OG;
    for (size_t i = 0; i < NumbersBeforeLoopLenght-1; i++)
    {
        BeginningNum = GenNextElement(BeginningNum, A, B, M);
        CountTillLenght[BeginningNum]++;
    }
    Lenght -= NumbersBeforeLoopLenght;
    int Repeated = Lenght % Looplenght;
    for (size_t i = 0; i <= Repeated; i++)
    {
        CountTillLenght[Loop[i]]++;
    }
    Lenght -= Repeated;
    int smallloop = Lenght / Looplenght;
    for (size_t i = 0; i < Looplenght; i++)
    {
        CountTillLenght[Loop[i]] += smallloop;
    }
    int CCount = 0;
    for (size_t i = 0; i < CountTillLenght.size(); i++)
    {
        CCount += CountTillLenght[i];
        if (CCount >= K+1) {
            cout << i << "\n";
            return 0;
        }
    }
}

// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu

// Tips for Getting Started: 
//   1. Use the Solution Explorer window to add/manage files
//   2. Use the Team Explorer window to connect to source control
//   3. Use the Output window to see build output and other messages
//   4. Use the Error List window to view errors
//   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
//   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 3ms 1808 KiB
2 Elfogadva 0/0 14ms 33172 KiB
3 Elfogadva 2/2 3ms 2212 KiB
4 Elfogadva 2/2 3ms 2460 KiB
5 Elfogadva 2/2 3ms 2640 KiB
6 Elfogadva 2/2 2ms 2724 KiB
7 Elfogadva 2/2 3ms 2852 KiB
8 Elfogadva 4/4 3ms 3488 KiB
9 Elfogadva 4/4 3ms 3476 KiB
10 Elfogadva 4/4 3ms 3468 KiB
11 Elfogadva 4/4 3ms 3528 KiB
12 Elfogadva 4/4 3ms 3536 KiB
13 Elfogadva 4/4 14ms 34228 KiB
14 Elfogadva 4/4 14ms 34228 KiB
15 Elfogadva 4/4 14ms 34228 KiB
16 Elfogadva 4/4 17ms 34360 KiB
17 Elfogadva 4/4 17ms 34536 KiB