P9345 夕阳西下几时回【构造】
Nostopathy · · 题解
首先本题是道结论题。
先来一个结论:
::::info[证明]{open}
由于
那么第一问就解决啦!判断是否
接下来,如何构造?
我们先考虑最多的情况,需要有 1 2 4 3 6 这样。
但是这样可能会出现重复的 GCD。我们可以先输出
接下来考虑减少到
::::success[代码]
#include <bits/stdc++.h>
using namespace std;
int t, n, k;
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin >> t;
while(t --){
cin >> n >> k;
if(k > n / 2){
cout << "No\n";
continue;
}
cout << "Yes\n";
cout << "1 ";
for(int i = n; i >= 2 * k + 1; -- i) cout << i << " ";
for(int i = 2; i <= 2 * k; i *= 2) cout << i << " ";
for(int i = 3; i <= 2 * k; i += 2) for(int j = i; j <= 2 * k; j *= 2) cout << j << " ";
cout << "\n"; // 多测不换行,爆零两行泪
}
return 0;
}
::::
感谢大家!