Perfect Permutation Solution || Codechef February Cook-Off 2022

      

Perfect Permutation Solution 

Codechef February Cook-Off 2022
Problem Code : PERFPERM

Solution :

#include <bits/stdc++.h>
#define ll long long int
using namespace std;

void solve()
{
    ll n, k;
    cin >> n >> k;
    ll a[n + 1];
    for (ll i = 1; i <= n; i++)
        a[i] = i;
    ll val = n - k;
    if (n <= 3)
    {
        if (n == 2)
        {
            if (k == 1)
            {
                a[1] = 2;
                a[2] = 1;
            }
        }
        else if (n == 3)
        {
            if (k == 1)
            {
                a[1] = 1;
                a[2] = 3;
                a[3] = 2;
            }
            else if (k == 2)
            {
                a[1] = 3;
                a[2] = 2;
                a[3] = 1;
            }
        }
    }
    else if (val == 1)
    {
        swap(a[2], a[4]);
    }
    else
    {
        if ((val % 2) == 0)
        {
            for (ll i = k + 1; i <= n; i += 2)
            {
                swap(a[i], a[i + 1]);
            }
        }
        else
        {
            for (ll i = k + 1; i <= n - 3; i += 2)
            {
                swap(a[i], a[i + 1]);
            }
            a[n - 2] = n - 1;
            a[n - 1] = n;
            a[n - 0] = n - 2;
        }
    }
    for (ll i = 1; i <= n; i++)
    {
        cout << a[i] << " ";
    }
    cout << "\n";
}

int main()
{
    ll t;
    cin >> t;
    while (t--)
    {
        solve();
    }
}

Comments