首页 > 其他分享 >蓝桥杯-公平抽签

蓝桥杯-公平抽签

时间:2024-04-09 22:44:35浏览次数:14  
标签:chosen 抽签 xiaowang 蓝桥 int 公平 xiaoA

0.题目

题目描述

小A的学校,蓝桥杯的参赛名额非常有限,只有 m 个名额,但是共有 n 个人报名。

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

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

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

输入描述

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

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

1≤m≤n≤15。

输出描述

输出共若干行,每行包含 m 个字符串,表示该结果被选中到人名(需按字符串的输入顺序大小对结果进行排序)。

输入输出样例
示例

输入
3 2
xiaowang
xiaoA
xiaoli

输出
xiaowang xiaoA
xiaowang xiaoli
xiaoA xiaoli

1.题解

1.1 组合型枚举-回溯分析法

思路

套用组合型枚举(\(C_n^m\))的模板代码即可

代码

#include<bits/stdc++.h>
using namespace std;
int n, m;
string vec[16];
vector<string> chosen;

// x代表遍历的当前位x 
void DFS(int x){
	// 已选数目大于 m 或者 剩余数目和已选数目加起来不够m, 就不用继续讨论了 
	if(chosen.size() > m || (chosen.size() + n - x + 1)< m) return;
	// 一共[1,n], x==n+1 已经遍历完了,如果通过了上面的条件,说明这里确实是选中了m个的 
	if(x == n + 1){
		for(string str : chosen){
			cout << str << " ";
		}
		cout << endl;
		return; 
	} 
	// 选中当前数
	chosen.push_back(vec[x]);
	DFS(x + 1);
	// 不选中当前数 
	chosen.pop_back();
	DFS(x + 1);
}
int main() {
	cin >> n >> m;
	for(int i = 1; i <= n; i++) {
		cin >> vec[i]; 
	}
	DFS(1);
	return 0;
}

标签:chosen,抽签,xiaowang,蓝桥,int,公平,xiaoA
From: https://www.cnblogs.com/trmbh12/p/18125053

相关文章

  • 蓝桥杯 强者挑战赛9
    标算无理数位数查询LL没开全,WA想不太清楚细节,写了半个多小时。。。预处理而不是现算会好写一点赛时做法先确定第\(n\)位所属的数的位数,再确定该位数中第\(k\)大的数标算设\(g(x)\)表示\(m\)进制下\(1\simx\)的位数和,二分第\(n\)位所属的数贝贝的集合先不......
  • 蓝桥杯之初等数论
    在蓝桥杯竞赛中,初等数论部分涉及多个关键知识点。以下是对这些知识点的详细列出、基本概念解释、应用实例以及解题策略和步骤的说明:1.质数与合数基本概念:质数(素数):大于1的自然数中,只能被1和它本身整除的数。合数:除了1和它本身以外还有其他因数的自然数。应用实例:题目:......
  • 蓝桥杯-外卖店优先级
     代码及其解析#include<bits/stdc++.h>usingnamespacestd;constintN=100010;intorder[N];//order[id]第id号店上一次的订单,记录的是时间intprior[N];//prior[id]第id号店的优先级intflag[N];//flag[id]第id号店在不在优先缓存中structnode{......
  • 蓝桥杯-【二分】求阶乘
     思路:对于有几个0,10一定会是5的整数倍,2的因子数一定比5的多,所以只要算5的个数即可, 30%,每个n都去算#include<bits/stdc++.h>usingnamespacestd;#definelllonglongllcheck(lln){//计算n!末尾有多少个0llcnt=0;while(n)cnt+=......
  • P8625 [蓝桥杯 2015 省 B] 生命之树
    题目:链接:https://www.luogu.com.cn/problem/P8625基本思路:1.使用dp[N]记录i节点的当前最大值2.使用vectornex[N]记录图3.使用vis[N]防回退如果该节点没有子节点,那么这个点的最大值就记录为当前的值:val如果该节点有子节点,那么先遍历子节点,然后+res并记录由于使用了vis,那么......
  • 蓝桥杯历年试题 砝码称重
    看到这个题,自然而然想到用集合set来做,因为set本身就有去重的效果。#include<bits/stdc++.h>usingnamespacestd;intN;intw;set<int>s;intmain(){ cin>>N; for(inti=1;i<=N;i++) { cin>>w; vector<int>v(s.begin(),s.end()); //这里需要用v......
  • 【每周例题】蓝桥杯 C++ 多数
    多数元素题目多数元素思路分析一.第一个想法,暴力遍历,然后会发现容易超时,那么更进一步想:哈希表使用哈希表存储每个数出现的次数,即使用哈希映射(HashMap)来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数加入后,遍历所有键值对,......
  • 蓝桥杯备考随手记: Java 中常用的排序和查找方法
    1.排序方法Arrays.sort():用于对数组进行排序。它使用优化的快速排序算法来对数组进行排序。示例代码:int[]arr={5,2,8,1,6};Arrays.sort(arr);Collections.sort():用于对集合进行排序。它使用优化的归并排序算法来对集合进行排序。示例代码:List<Integer>list......
  • 蓝桥杯备考随手记: BigInteger 和 BigDecimal
    在Java中,BigInteger和BigDecimal是用来处理大整数和高精度浮点数的类,分别属于java.math包。下面分别介绍这两个类的特点、用途和常用方法:BigInteger:特点:BigInteger类表示任意精度的整数,可以处理比long型和int型更大范围的整数。BigInteger是不可变的(immutable)类,一......
  • P8794 [蓝桥杯 2022 国 A] 环境治理
    P8794[蓝桥杯2022国A]环境治理-洛谷|计算机科学教育新生态(luogu.com.cn)#include<iostream>usingnamespacestd;#definelllonglongconstintN=150;constintinf=0x7fffffff;intn,q;intd[N][N],l[N][N];intt[N][N];voidfloyd(){for(intk=......