10593 2024. 04. 06 11:47:24 MagyarKendeSZLG Kombináció (50) cpp17 Elfogadva 50/50 3ms 4488 KiB
// O(M)
#include <bits/stdc++.h>
using namespace std;

int N, M;

vector<int> after(vector<int> v) {
    for (int i = M - 1 ; i >= 0; i--) {
        if (v[i] < N - (M - i - 1)) {
            v[i]++;
            for (int j = i + 1; j < M; j++) {
                v[j] = v[i] + j - i;
            }
            return v;
        }
    }
    for (int i = 0; i < M; i++) {
        v[i] = i + 1;
    }
    return v;
}

vector<int> before(vector<int> v) {
    for (int i = M - 1 ; i > 0; i--) {
        if (v[i - 1] + 1 < v[i]) {
            v[i]--;
            for (int j = i + 1; j < M; j++) {
                v[j] = N - (M - j - 1);
            }

            return v;
        }
    }
    if (v[0] > 1) {
        v[0]--;
        for (int j = 1; j < M; j++) {
            v[j] = N - (M - j - 1);
        }
    } else {
        for (int i = 0; i < N; i++) {
            v[i] += N - M;
        }
    }
    return v;
}

int main() {
    cin.tie(0), ios::sync_with_stdio(0);

    cin >> N >> M;
    vector<int> v(M);
    for (int& x : v) cin >> x;
    
    for (int x : before(v)) cout << x << " ";
    cout << "\n";
    for (int x : after(v)) cout << x << " ";
    cout << "\n";
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 3ms 1828 KiB
2 Elfogadva 0/0 3ms 2024 KiB
3 Elfogadva 2/2 3ms 2236 KiB
4 Elfogadva 2/2 3ms 2452 KiB
5 Elfogadva 2/2 3ms 2668 KiB
6 Elfogadva 2/2 3ms 2884 KiB
7 Elfogadva 2/2 3ms 2976 KiB
8 Elfogadva 2/2 3ms 3116 KiB
9 Elfogadva 2/2 3ms 3340 KiB
10 Elfogadva 4/4 3ms 3552 KiB
11 Elfogadva 4/4 3ms 3636 KiB
12 Elfogadva 4/4 3ms 3668 KiB
13 Elfogadva 4/4 3ms 3876 KiB
14 Elfogadva 4/4 3ms 4080 KiB
15 Elfogadva 4/4 3ms 4316 KiB
16 Elfogadva 6/6 3ms 4400 KiB
17 Elfogadva 6/6 3ms 4488 KiB