4556: 【作】【例82.3】 公平抽签

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:2 解决:1

题目描述

小明的学校,市赛的参赛名额非常有限,只有  个名额,但是共有  个人报名。

作为老师非常苦恼,他不知道该让谁去,他在寻求一个绝对公平的方式。

于是他准备让大家抽签决定,即  个签是去,剩下的是不去。

小明非常想弄明白最后的抽签结果会有多少种不同到情况,请你设计一个程序帮帮小明!

输入

输入第一行包含两个字符 ,,其含义如题所述。

接下来第二行到第  行每行包含一个字符串 ,表示个人名。

输出

输出共若干行,每行包含 个字符串,表示该结果被选中到人名。

同一个方案中按读入的人名顺序输出,不同方案的输出顺序任意。

样例输入 复制

3 2
xiaowang
xiaoA
xiaoli

样例输出 复制

xiaowang xiaoA
xiaowang xiaoli
xiaoA xiaoli

提示

#include<bits/stdc++.h>

using namespace std;
int n, m;
string a[20];
int main() {
    cin >> n >> m;
    for (int i = 0; i < n; i++) cin >> a[i];
    int U = 1 << n;
    for (int S = 0; S < U; S++)
        if (__builtin_popcount(S) == m) {
            for (int i = 0; i < n; i++)
                if (S & (1 << i)) cout << a[i] << ' ';
            cout << endl;
        }
    return 0;
}