最小化价格
题目描述
要求一种方式,使得每组人都到一个各不相同的地点,最小化选择的价格
每个队伍的人都要在同一个地方每个地方只能有一个队伍
输入描述:
1 | 第一行n,m |
输出描述:
1 | 输出最小化选择的价格,无解输出-1 |
示例1
输入
1 | 3 4 |
输出
1 | 12 |
备注:
1 | 所有数据小于1e5 |
题解
首先对地点以价格从小到大排序,如果相同按容量从小到大排序。由于集合每次插入自动排序,而且可以执行删除操作,因此我们可以用集合储存队伍。然后将队伍放入集合中。对排完序的地点进行遍历,每个地点对容量进行判断,直接对集合up_bound-1操作,就是能被该地点容纳的人数最多的队伍。若存在该队伍,将该队伍从集合中删除,意为该队伍匹配到该地点。然后将总价格加上该地点所需的价格。否则不执行操作,意为当前没有队伍能和该地点匹配。最后对集合判断是否为空,若为空,则证明队伍已经匹配完毕,输出总价格即可,否则意为不是所有队伍都能被容纳,输出-1。
代码
1 | #include<iostream> |
车辆安排
题目描述
有n个队伍,每个队伍的人数小于等于5,每辆车最多坐5个人,要求一个队伍的人都在一辆车上,求最少的车数
输入描述:
1 | 第一行n |
输出描述:
1 | 输出最少车数 |
示例1
输入
1 | 3 |
输出
1 | 3 |
备注:
1 | n≤1e5 |
题解
设置一个数组,分别储存1,2,3,4,5人队伍的个数。总车数=人数为5的队伍数+(人数为4+1或4的队伍数)+(人数为3+2或3+1+1或3的队伍数)+(人数为2+2+1或2+1+1+1或2的队伍数)+(人数为1*5或1的队伍数),(组合方式按优先级排列)。时间复杂度O(1)。
代码
1 | #include<stdio.h> |
出队
题目描述
约瑟夫问题(约瑟夫问题),n个人,1 2报数 1出队( 就是体育课的时候1 2报数 1出队,2留下),q次询问,每次求第x个人是第几个出队的
输入描述:
1 | 第一行两个数n,q |
输出描述:
1 | 一行输出一个询问的答案 |
示例1
输入
1 | 4 3 |
输出
1 | 3 |
说明
1 | 1 2 3 4围成一圈,第一轮:1 2报数,1出队,2留下,3出队,4留下,第二轮,2出队,4留下 |
备注:
1 | q≤500000 |
代码
1 | #include<iostream> |