A
在1到N中选择最大的个数组成一个集合,使集合的任意子集不等于K。
题解思路
从 (k+1)/2到K以及k+1到N中取到。
K数可能由多个数取到,多个数最终变成由两个数组成。一大一小,我们必须只能拿一个,拿大的,因为小的可能被更小的组成了,这样就变回了多数组成。
AC代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
int a[100100];
int main ()
{
int t;
cin>>t;
while(t--)
{
int n,k;
cin>>n>>k;
cout<<k/2+n-k<<"\n";
for (int i = (k+1)/2 ; i < k ; i++ )
cout<<i<<" ";
for (int i = k+1 ; i <= n ; i++ )
cout<<i<<" ";
cout<<"\n";
}
}
B
看不懂意思