186802025-10-29 22:39:57KristófKombináció (50)cpp17Partially correct 46/501ms508 KiB
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int n, m;
    cin >> n >> m;
    vector<int> most(m + 1, 0);
    vector<int> elso(m + 1, 0);
    vector<int> utso(m + 1, 0);

    for (int i = 1; i <= m; i++)
    {
        elso[i] = i;
        cin >> most[i];
    }
    for (int i = 1; i <= m; i++)
        utso[i] = n - m + i;

    // --- ha az utolsó kombináció ---
    if (most == utso)
    {
        // előző = legnagyobb kombináció előtt
        vector<int> elozo = most;
        for (int i = m; i > 0; i--)
        {
            if ((i == 1 && most[i] > 1) || (i > 1 && most[i] - 1 > most[i - 1]))
            {
                elozo[i]--;
                for (int j = i + 1; j <= m; j++)
                    elozo[j] = n - (m - j);
                for (int i = 1; i <= m; i++)
                    cout << elozo[i] << " ";
                break;
            }
        }
        cout << endl;
        // következő az első
        for (int i = 1; i <= m; i++)
            cout << elso[i] << " ";
        return 0;
    }

    // --- ha az első kombináció ---
    if (most == elso)
    {
        for (int i = 1; i <= m; i++)
            cout << utso[i] << " ";
        cout << endl;
        most[m]++;
        for (int i = 1; i <= m; i++)
            cout << most[i] << " ";
        return 0;
    }

    // --- általános eset: előző ---
    vector<int> elozo = most;
    for (int i = m; i > 0; i--)
    {
        if ((i == 1 && most[i] > 1) || (i > 1 && most[i] - 1 > most[i - 1]))
        {
            elozo[i]--;
            for (int j = i + 1; j <= m; j++)
                elozo[j] = n - (m - j);
            for (int i = 1; i <= m; i++)
                cout << elozo[i] << " ";
            break;
        }
    }

    cout << endl;

    // --- következő ---
    vector<int> kov = most;
    kov.push_back(n + 1);
    for (int i = m; i > 0; i--)
    {
        if (most[i] + 1 < kov[i + 1])
        {
            kov[i]++;
            for (int j = i + 1; j <= m; j++)
                kov[j] = kov[j - 1] + 1;
            for (int i = 1; i <= m; i++)
                cout << kov[i] << " ";
            break;
        }
    }

    return 0;
}
SubtaskSumTestVerdictTimeMemory
base46/50
1Accepted0/01ms316 KiB
2Accepted0/01ms316 KiB
3Partially correct1/21ms316 KiB
4Accepted2/21ms316 KiB
5Accepted2/21ms316 KiB
6Accepted2/21ms316 KiB
7Accepted2/21ms316 KiB
8Partially correct1/21ms316 KiB
9Accepted2/21ms316 KiB
10Accepted4/41ms316 KiB
11Accepted4/41ms316 KiB
12Accepted4/41ms508 KiB
13Accepted4/41ms316 KiB
14Partially correct2/41ms316 KiB
15Accepted4/41ms316 KiB
16Accepted6/61ms500 KiB
17Accepted6/61ms316 KiB