竞赛讨论区 > C题一直90%,有没有高人hack一下
头像
Oran_tree
发布于 2023-01-20 21:55 广东
+ 关注

C题一直90%,有没有高人hack一下

我的思路比较复杂,分奇偶数讨论

偶数当中再分别讨论是否为4的倍数,是则以3 4 1 2 7 8 5 6形式输出

否则先写出前六个,然后剩下的以同样形式交换输出

偶数是没有什么问题的,然而讨论奇数的时候好像有点问题,先呈现一下我的原思路

奇数分三类,分别是模3余数为0 1 2

余数为0时,发现n-5为偶数,此时可以用于处理偶数时同样的方法进行输出

余数为1时其实类似,现在两个数一组来进行输出

余数为2时n-5为3的倍数,于是三个数一组进行输出

我试了一些<100的数,感觉规律上没什么错,,,实在是瞪不出来问题了

(但是后来我发现奇数情况可以简化,反正n-5都是偶数,都可以一起讨论,然后我发现这样却可以A

于是想求助一下这个做法到底假在哪里了呜呜呜

#include<cstdio>
using namespace std;
int main(){
    int n;
    scanf("%d",&n);
    if(n==3||n==2||n==1||n==7) printf("-1");
    else {
        if(n%2==0){
            if((n/2)%2==0){
                for(int i=0;i<=n/4-1;i++){
                    if(i<n/4-1) printf("%d %d %d %d ",4*i+3,4*i+4,4*i+1,4*i+2);
                    else printf("%d %d %d %d",4*i+3,4*i+4,4*i+1,4*i+2);
                }
            }
            else{
                if(n==6) printf("3 5 1 6 2 4");
                else printf("3 5 1 6 2 4 ");
                for(int i=0;i<=n/4-2;i++){
                    if(i<n/4-2) printf("%d %d %d %d ",9+4*i,10+4*i,7+4*i,8+4*i);
                    else printf("%d %d %d %d",9+4*i,10+4*i,7+4*i,8+4*i);
                }
            }
        }
        else{
            if(n%3==0){
                if(((n-5)/2)%2==1){
                    printf("3 5 1 6 2 4 ");
                    for(int i=0;i<=(n-5)/4-2;i++){
                        printf("%d %d %d %d ",9+4*i,10+4*i,7+4*i,8+4*i);
                    }
                    printf("%d %d %d %d %d",n-1,n,n-4,n-3,n-2);
                }
                else{
                    for(int i=0;i<=(n-5)/4-1;i++){
                        printf("%d %d %d %d ",4*i+3,4*i+4,4*i+1,4*i+2);
                    }
                    printf("%d %d %d %d %d",n-1,n,n-4,n-3,n-2);
                }
            }
            if(n%3==1){
                for(int i=1;i<=(n-5)/2;i++){
                    if(i%2==1) printf("%d %d ",i*2+1,i*2+2);
                    else printf("%d %d ",i*2-3,i*2-2);
                }
                printf("%d %d %d %d %d",n-1,n,n-4,n-3,n-2);
            }
            if(n%3==2){
                for(int i=1;i<=(n-5)/3;i++){
                    if(i%2==1) printf("%d %d %d ",i*3+1,i*3+2,i*3+3);
                    else printf("%d %d %d ",i*3-5,i*3-4,i*3-3);
                }
                printf("%d %d %d %d %d",n-1,n,n-4,n-3,n-2);
            }
        }
    }
    return 0;
}

全部评论

(2) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐