2018-ACetic_ACid/AugTrain-04/B

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

{{{
#include <bits/stdc++.h>
#ifdef LOCAL
#define debug 1
#else
#define debug 0
#endif
using namespace std;
typedef unsigned long long ll;
int main()
{
    freopen("bubble.in", "r", stdin);
    freopen("bubble.out", "w", stdout);
    ll n, k;
    while (cin >> n >> k)
    {
        if (n == 0 && k == 0) break;
        vector<int> a(n);
        for (int i = 0; i < n; i++)
        {
            a[i] = i + 1;
        }
        k--;
        for (int i = 0; (1llu << i) <= k; i++)
        {
            if (k & (1llu << i))
            {
                swap(a[n - i - 1], a[n - i - 2]);
            }
        }
        for (int i = 0; i < n; i++)
        {
            if (i) printf(" ");
            printf("%d", a[i]);
        }
        printf("\n");
    }
}
}}}
#include <bits/stdc++.h>
#ifdef LOCAL
#define debug 1
#else
#define debug 0
#endif
using namespace std;
typedef unsigned long long ll;
int main()
{
    freopen("bubble.in", "r", stdin);
    freopen("bubble.out", "w", stdout);
    ll n, k;
    while (cin >> n >> k)
    {
        if (n == 0 && k == 0) break;
        vector<int> a(n);
        for (int i = 0; i < n; i++)
        {
            a[i] = i + 1;
        }
        k--;
        for (int i = 0; (1llu << i) <= k; i++)
        {
            if (k & (1llu << i))
            {
                swap(a[n - i - 1], a[n - i - 2]);
            }
        }
        for (int i = 0; i < n; i++)
        {
            if (i) printf(" ");
            printf("%d", a[i]);
        }
        printf("\n");
    }
}