E. Liner vectors
题意:
规定n位数 可以使得任意k位为1 其余为0 要求判断能否构造出n个不同的n位二进制数 满足任意一个数都不能有其他已构造出来的数亦或得到。
如果能构造出这n个二进制数按字典序输出符合条件最小的数 否则输出-1
思路:
如果n == k显然只能构造一个数 只有k=1时才满足其余都不行
如果 k为偶数 肯定不能构造出n个 因为含相同个数1的两个二进制数 亦或 最后得到的数的二进制中肯定包含偶数个1 一个二进制肯定能由其他两个或几个亦或得到
如果k是奇数 要满足一个数不能由其他n-1个数亦或得到 就是要这n个数线性无关 对于k=3
0111
1011 011
1101 101
1110这个矩阵满秩是线性无关的 但如果k是偶数 例 110 如果按亦或操作是线性相关的不满足
0010011
0100011
然后对于n 固定后k-1位为1 还有一位1可以放在前1到n-(k + 1)位 例:1000011 显然这几个数也是线性无关的 而这几个数与前k+1个数也是线性无关的
正好n个且字典序最小
#include
#include
#include<string>
#include<set>
#include