题目大意:对于一个全排列p,定义它的value值X:x初始化为0,对于i属于1到n的每一个pi,如果x<pi,x+=pi,否则,x=0。现给出n,求一个长度为n的全排列使x最大
思路:通过计算不难发现x的最大值即为n+n-1,所以我们让排列的最后两个数为n-1,n,然后只需要令前面的数x=0即可,如果n是偶数的话只要两个数一组,前面的数比后面的大即可,比如n=6时,就是4 3 2 1 5 6,如果n是奇数的话,可以在n-1前面放上1 2 3这三个x=0的数,然后再按照n=偶数时的方式放前面的数,比如n=7的全排列为5 4 1 2 3 6 7
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
scanf("%d", &n);
if (n & 1)//判断n为奇数
{
for (int i = n - 2; i >= 5; i-=2)
{
printf("%d %d ", i, i - 1);//输出一个数接这个数-1
}
for (int i = 1; i <= 3; i++)
{
printf("%d ", i);//输出123
}
}
else
{//n为偶数
for (int i = n - 2; i >= 2; i-=2)
{
printf("%d %d ", i, i - 1);//输出一个数接这个数-1
}
}
printf("%d %d", n - 1, n);//输出n-1,n
printf("\n");
}
return 0;
}