147562025-02-01 18:29:02arnoldbeilandKövetkező permutáció (50 pont)cpp17Accepted 50/506ms520 KiB
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

//ifstream fin("input.txt");
//ofstream fout("output.txt");


int globalis;
bool mycmp(int x, int y)
{
    if (x > globalis && y > globalis)
        return x < y;
    if (x < globalis && y < globalis)
        return x > y;

    return x < y;
}

bool csokkeno(const vector<int> &v)
{
    int n = v.size();

    for (int i = 0; i <= n-2; i++)
        if (v[i] < v[i+1])
            return false;
    return true;
}

void megold(vector<int> &v)
{
    int n = v.size();
    int i = n-2;
    while (v[i] > v[i+1])
        i--;
    if (i < 0)
        return;

    int hol = i;
    int a = v[hol];

    int minimum = v[hol+1];
    int minimum_hely = hol+1;

    for (i = hol+2; i < n; i++)
        if (v[i] < minimum && v[i] > a) {
            minimum = v[i];
            minimum_hely = i;
        }

    v[minimum_hely] = a;
    v[hol] = minimum;

    globalis = minimum;
    sort(v.begin()+hol+1, v.end(), mycmp);
}

int main()
{
    int n;
    cin >> n;

    vector<int> v(n);
    for (int i = 0; i < n; i++)
        cin >> v[i];


    megold(v);

    for (int i = 0; i < n; i++)
        cout << v[i] << " ";
    cout << endl;

    return 0;
}


/*
int main_trukkos()
{
    int n;
    cin >> n;

    vector<int> v(n);
    for (int i = 0; i < n; i++)
        v[i] = i+1;

    while (true) {
        for (int i = 0; i < n; i++)
            fout << v[i] << " ";
        fout << endl;

        if (csokkeno(v))
            break;

        megold(v);
    }

    return 0;
}
*/



bool mentes(const vector<int> &v)
{
    int n = v.size();

    for (int i = 0; i < n; i++)
        for (int j = i+1; j < n; j++)
            for (int k = j+1; k < n; k++)
                if (v[i] > v[k] && v[k] > v[j])
                    return false;
    return true;
}

/*
int main_brute()
{
    int n;
    cin >> n;

    vector<int> v(n);
    for (int i = 0; i < n; i++)
        v[i] = i+1;

    do {
        /*
        for (int i = 0; i < n; i++)
            fout << v[i] << " ";

        if (mentes(v))
            fout << " ok";

        fout << endl;
        *//*
        if (mentes(v)) {
            for (int i = 0; i < n; i++)
                fout << v[i] << " ";
            fout << endl;
        }
    } while (next_permutation(v.begin(), v.end()));

    return 0;
}
*/
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/01ms508 KiB
2Accepted0/03ms416 KiB
3Accepted1/11ms508 KiB
4Accepted1/11ms316 KiB
5Accepted1/11ms316 KiB
6Accepted1/11ms316 KiB
7Accepted2/21ms508 KiB
8Accepted2/21ms316 KiB
9Accepted2/21ms316 KiB
10Accepted2/21ms316 KiB
11Accepted1/11ms316 KiB
12Accepted1/11ms328 KiB
13Accepted1/11ms408 KiB
14Accepted1/11ms316 KiB
15Accepted3/31ms316 KiB
16Accepted3/31ms316 KiB
17Accepted3/31ms316 KiB
18Accepted3/32ms436 KiB
19Accepted3/34ms320 KiB
20Accepted3/34ms484 KiB
21Accepted3/34ms420 KiB
22Accepted3/34ms324 KiB
23Accepted3/34ms520 KiB
24Accepted3/34ms496 KiB
25Accepted2/26ms316 KiB
26Accepted2/24ms316 KiB