一二三四五 上山打老虎

I-限制不互素对的排列

题目链接:https://ac.nowcoder.com/acm/contest/9981/I

思路:题目中限制为 \(\ k>= \lfloor \frac{n}{2}\rfloor\), 通过规律可以得出偶数可以构成\(\lfloor \frac{n}{2}\rfloor\)-1 对满足条件的数,则除了\(k<\lfloor \frac{n}{2}\rfloor\)时可以通过前边是偶数构造,等于时可以通过6 3 来构造剩余的一对,但是由于n<6时无法构造最后一对,所以 n<5时无法构造k=\(\lfloor \frac{n}{2}\rfloor\) 情况,输出-1

收获:如果题目中没有限制条件,而是要求构造最大对时,如何构造:(待完善)

代码:

#include<iostream>

using namespace std;

int main (){
    
    int n,k;
    cin>>n>>k;
    if(n<6&&k>=n/2){
        cout<<-1;
        return 0;
    }
    if(k==n/2){
        cout<<1<<" ";
        for(int i=2;i<=n;i++){
            if(i==6)continue;
            if(i%2==0)cout<<i<<" ";
        }
        cout<<"6 ";
        for(int i=3;i<=n;i++){
            if(i%2)cout<<i<<" ";
        }
    }
    else {
        for(int i=2;i<=2*(k+1);i++){
            if(i%2==0)cout<<i<<" ";
        }
        for(int i=1;i<=2*(k+1);i++){
            if(i%2)cout<<i<<" ";
        }
        for(int i=2*(k+1)+1;i<=n;i++)cout<<i<<" ";
    }
    
    return 0;
}
posted @ 2021-02-04 22:19  黒川川  阅读(50)  评论(0)    收藏  举报