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;
}

浙公网安备 33010602011771号