求 hack
查看原帖
求 hack
305891
夜明楼主2024/9/16 21:04

大致思路是将 nn 块形如 [i,n][i,n] 的联通块绑在一起,然后根据 ii 形如 1,3,...n,n1,...,21,3,...n,n-1,...,2(奇数情况,偶数类似),每块内摆放也形如 1,3,...n,n1,...,21,3,...n,n-1,...,2。细节见代码。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,m=0;
    scanf("%d",&n);
    if(n%4==2||n%4==3){
        ++m;
    }
    for(int i=1;i<=n;i++){
        if(!(i&1)){
            continue;
        }
        ++m;
        for(int j=i;j<=n;j++){
            if(m&1){
                if(j&1){
                    printf("%d ",j);
                }
            }else{
                if(!(j&1)){
                    printf("%d ",j);
                }
            }
        }
        for(int j=n;j>=i;j--){
            if(!(m&1)){
                if(j&1){
                    printf("%d ",j);
                }
            }else{
                if(!(j&1)){
                    printf("%d ",j);
                }
            }
        }
    }
    for(int i=n;i;i--){
        if(i&1){
            continue;
        }
        ++m;
        for(int j=i;j<=n;j++){
            if(m&1){
                if(j&1){
                    printf("%d ",j);
                }
            }else{
                if(!(j&1)){
                    printf("%d ",j);
                }
            }
        }
        for(int j=n;j>=i;j--){
            if(!(m&1)){
                if(j&1){
                    printf("%d ",j);
                }
            }else{
                if(!(j&1)){
                    printf("%d ",j);
                }
            }
        }
    }
    printf("\n");
    return 0;
}
2024/9/16 21:04
加载中...