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
Post a Comment