4556: 【作】【82.3】 公平抽签
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:22
解决:8
题目描述
小明的学校,市赛的参赛名额非常有限,只有 个名额,但是共有 个人报名。
作为老师非常苦恼,他不知道该让谁去,他在寻求一个绝对公平的方式。
于是他准备让大家抽签决定,即 个签是去,剩下的是不去。
小明非常想弄明白最后的抽签结果会有多少种不同到情况,请你设计一个程序帮帮小明!
输入
输入第一行包含两个字符 ,,其含义如题所述。
接下来第二行到第 行每行包含一个字符串 ,表示个人名。。
输出
输出共若干行,每行包含 个字符串,表示该结果被选中到人名。
同一个方案中按读入的人名顺序输出,不同方案的输出顺序任意。
样例输入 复制
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;
}