每日一题 | 不确定参与人数的抽奖问题
时间:2022-07-22
本文章向大家介绍每日一题 | 不确定参与人数的抽奖问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
昨日问题
每日一题 | 两个序列归并问题
题目同样源于codeforces,链接:https://codeforces.com/gym/102646/problem/B
这是一道经典的贪心问题,由于我们可以随意地从A和B中获取元素,我们又希望得到的结果的字典序最小。我们很容易分析出要尽量将小的元素放在前面,而大的元素放在后面。
基于这样的原理,我们很容易想到算法,可以用两个指针分别指向A和B的开头。每次都选择其中较小的那一个。比如1 3 5和2 4 6,一开始是1和2比,由于1小于2,所以选择1。A的指针移动一位指向3,下一轮比较3和2,由于2小于3,所以选择2。如此循环往复直到所有元素都被取完为止。
我们观察一下样例,这个算法都可以支持。
但是这里藏了一个trick,如果A和B的元素相等,那么应该怎么办呢?是随便取哪个都行吗,还是?
比如A是3 3 3 1,B是3 3 3 4,这个时候还能随意取吗?显然不能,因为A中的第四个元素是1,小于B中第四个元素4。所以应该先取A中的3,也就是说当A和B头部的元素相等的时候,我们应该继续往后比较,直到出现元素不同的情况为止,然后我们选择较小的那个。
这段代码并不难写:
import sys
n = int(input())
A = list(map(int, input().split(' ')))
B = list(map(int, input().split(' ')))
# 插入无穷大,作为标兵,防止超界
A.append(sys.maxsize)
B.append(sys.maxsize)
C = []
ida, idb = 0, 0
for i in range(2*n):
if A[ida] < B[idb]:
C.append(A[ida])
ida += 1
elif A[ida] > B[idb]:
C.append(B[idb])
idb += 1
else:
# 如果相等往后比较
ca, cb = ida+1, idb+1
while A[ca] == B[cb] and ca <= n and cb <= n:
ca += 1
cb += 1
if A[ca] < B[cb]:
C.append(A[ida])
ida += 1
else:
C.append(B[idb])
idb += 1
for i in C:
print(i, end=' ')
今日问题
不确定抽奖问题。
抽奖我们都很熟悉,比如年会抽奖,一共100个员工,抽10个人中奖。这个情况很容易解决,因为抽奖人数和中奖数都是确定的,我们只需要用随机数很容易解决。但假设我们是公开抽奖,谁都可以参与,事先不知道参与人数,只确定中奖数,我们应该怎么设计其中的算法呢?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在 Linux 上用 DNS 实现简单的负载均衡的方法
- centos7.2.1511安装jdk1.8.0_151及mysql5.6.38的方法
- Linux CentOS使用crontab设置定时重启的方法
- centos安装php5、卸载php、安装php7的教程
- centos7中crontab定时计划任务5分钟一次命令写法
- Ubuntu16.04 安装Teamviewer的教程详解
- 01 . OpenResty简介部署,优缺点,压测,适用场景及用Lua实现服务灰度发布
- 详解Linux iptables 命令
- 详解fedora 开启 apache 并 开启目录浏览模式
- CentOS新建用户并使能密钥登录的方法
- Linux系统扩容根目录磁盘空间的操作方法
- Linux如何查看进程栈信息示例
- linux查看硬盘大小与挂载硬盘的实现
- centos6.5 安装hadoop1.2.1的教程详解【亲测版】
- Linux中没有rc.local文件的完美解决方法