每日一道思维题——CF1352G - Special Permutation

题意:

有一个数n,求出,长度为n且左右差值x满足 2 <= x <= 4 的序列

解题思路:

1.n < 4时,无解

2. n = 4时,输出  3 1 4 2

3.n > 4且为奇数时,输出  1   1+2   1+4.....n-2   n   n-3   n-1   n-5   n-7....2

4.n > 4且为偶数时,输出  1   1+2   1+4.....n-1   n-4   n-2   n-6   n-8....2    

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<vector>

using namespace std;
typedef pair<int, int> PII;

int main()
{
   int t;
   scanf("%d", &t);
   while(t--)
   {
    int n;
    scanf("%d", &n);
    if(n < 4) printf("-1\n");
    else if(n == 4) printf("3 1 4 2\n");
    else if(n & 1){
        for(int i = 1; i <= n; i+=2) printf("%d ", i);
        printf("%d %d ", n-3, n-1);
        for(int i = n-5; i >= 2; i-=2) printf("%d ", i);
        printf("\n");
    }else{
        for(int i = 1; i <= n-1; i+=2) printf("%d ", i);
        printf("%d %d %d ", n-4, n, n-2);
        for(int i = n-6; i >= 2; i-=2) printf("%d ", i);
        printf("\n");

    }
   }
    return 0;
}

 

posted on 2023-02-01 09:57  玛卡巴卡要ac  阅读(24)  评论(0)    收藏  举报

导航