131772025-01-06 20:27:39DhaneHaneSorozat generáláscpp17Elfogadva 50/5050ms5524 KiB
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
#include <string>
#include <cmath>

using namespace std;

// Függvény a sorozat generálásához
string generate_next_number(const string& current, int A, int B, int M) {
    // Átváltjuk a számot integer típusba
    long long current_num = stoll(current);
    // Az új számot képezzük a képlettel: A * current + B
    long long next_num = A * current_num + B;

    // Az új számot karakterlánccá alakítjuk
    string next = to_string(next_num);

    // Ha az új szám hosszúsága kisebb, kiegészítjük nullákkal
    while (next.length() < 4 * M) {
        next = '0' + next;
    }

    // A középső 2*M számjegy kiválasztása
    return next.substr(M, 2 * M);
}

int main() {
    int M, A, B, N, K;
    string start;

    // Bemeneti adatok beolvasása
    cin >> M >>start>> A >> B >> N >> K;

    // Sorozat generálása
    vector<string> sequence;
    unordered_map<string, int> seen_numbers;
    int min_distance = N + 1; // Kezdetben a legnagyobb lehetséges távolság

    for (int i = 0; i < N; ++i) {
        string next = generate_next_number(start, A, B, M);

        // Ha már szerepelt a szám, akkor kiszámoljuk a távolságot
        if (seen_numbers.find(next) != seen_numbers.end()) {
            min_distance = min(min_distance, i - seen_numbers[next]);
        }

        // Hozzáadjuk az új számot a sorozathoz és tároljuk az indexét
        sequence.push_back(next);
        seen_numbers[next] = i;

        // Az új számot a következő iterációhoz
        start = next;
    }

    // A K. legnagyobb elem kiválasztása
    vector<long long> numbers;
    for (const string& num_str : sequence) {
        numbers.push_back(stoll(num_str));
    }

    // Rendezzük a számokat csökkenő sorrendbe
    sort(numbers.rbegin(), numbers.rend());

    // Kiíratjuk a válaszokat
    cout  << (min_distance == N + 1 ? -1 : min_distance) << endl;
    cout << numbers[K - 1] << endl;

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms508 KiB
2Elfogadva0/048ms5268 KiB
3Elfogadva2/21ms500 KiB
4Elfogadva2/23ms688 KiB
5Elfogadva2/23ms688 KiB
6Elfogadva2/22ms564 KiB
7Elfogadva2/23ms764 KiB
8Elfogadva4/44ms800 KiB
9Elfogadva4/49ms1452 KiB
10Elfogadva4/420ms2856 KiB
11Elfogadva4/419ms2668 KiB
12Elfogadva4/429ms4416 KiB
13Elfogadva4/437ms5012 KiB
14Elfogadva4/446ms5012 KiB
15Elfogadva4/443ms5312 KiB
16Elfogadva4/450ms5524 KiB
17Elfogadva4/448ms5384 KiB