算法
(贪心) $O(tn)$
注意到 $k + 1, k + 2, \cdots, n$ 这个集合的任意子集的元素之和都大于 $k$,另外,$\lceil \frac{k}{2}\rceil , \cdots, k - 1$ 中的任意子集之和也都大于 $k$ ,把这些数都取出,包含 $n - k + (k - \lceil \frac{k}{2}\rceil) = n - \lceil \frac{k}{2}\rceil$ 个数。
C++ 代码
#include <bits/stdc++.h>
#define srep(i, s, t) for (int i = s; i < t; ++i)
using std::cin;
using std::cout;
using std::vector;
int main() {
int t;
cin >> t;
while (t--) {
int n, k;
cin >> n >> k;
int x = (k + 1) / 2;
cout << n - x << '\n';
srep(i, k + 1, n + 1) cout << i << " ";
srep(i, x, k) cout << i << " ";
puts("");
}
return 0;
}