链接:https://ac.nowcoder.com/acm/contest/5671/E
来源:牛客网
#pragma warning (disable:4996)
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <vector>
#define inf 0X3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 5000 + 20;
vector<int> p;
vector<int> a;
bool vis[maxn];
int n, k;
bool exist()
{
for (int len = 2; len < n; len++)
{
bool flag = 0;
for (int i = 0; i + len <= n; i++)
{
int sum = a[i + len] - a[i];
if (sum % n == k)
{
flag = 1;
break;
}
}
if (!flag)
return 0;
}
return 1;
}
bool fun(int index)
{
int res = 0;
if (index > n)
{
if (exist())
{
//reverse(p.begin(), p.end());
while (p.size())
{
if (p.size() == 1)
printf("%d", p.back());
else
printf("%d ", p.back());
p.pop_back();
}
printf("\n");
return 1;
}
}
for (int i = 1; i <= n; i++)
if (vis[i] == 0)
{
p.push_back(i);
a.push_back(a[a.size() - 1] + i);
vis[i] = 1;
res = fun(index + 1);
if (res)
break;
p.pop_back();
a.pop_back();
vis[i] = 0;
}
return res;
}
int main()
{
scanf("%d%d", &n, &k);
int sum = 0;
for (int i = 1; i <= n; i++)
sum += i;
if (sum % n != k)
{
printf("-1\n");
return 0;
}
//a.push_back(0);
//if (!fun(1))
printf("%d ", n);
if (k != 0)
printf("%d ", k);
for (int i = 1; i < n / 2; i++)
printf("%d %d ", i, n - i);
if (n / 2 != k)
printf("%d %d ", n / 2, n / 2 + 1);
printf("\n");
return 0;
}