B题题意:
给你n个物品的价格,你需要找出来一个值b,使得每一个物品与这个b的差值的绝对值小于k。找到最大的b输出,如果找不到,那就输出-1
题解:
很简单嘛,找到上下限直接二分。下限就是所有物品中最小的价格。上限就是所有物品中最大价格加上k
代码:
1 #include
2 #include
3 #include
4 #include
5 #include
c题题意:
最开始有k电量,你需要玩n个回合的游戏,每一回合你可以有两个选择
1、玩游戏,但是要消耗a电量
2、边充电边玩,消耗b电量
还有一个限制:如果电量小于等于a,那就不可以玩游戏;如果电量小于等于b那就不可以边充边玩
如果玩游戏玩不了n个回合,就输出-1,否则就输出你玩游戏的次数(可不是边充边玩)
题解:
思路很容易想,但是就是实现难!
你可以先n个回合都选择第二种模式来玩游戏,看电量够不够。如果不够就直接输出-1
这里判断就可以先玩n-1个回合,看看剩下的电量大不大于b。如果大于那就证明可以玩够n个回合,否则就不可以
因为电量必须大于b才能边充边玩
然后就二分 选择了几次第一个选择(即消耗电量为a) ,每一次的判断都类似上面的判断方式
还有就是要用long long
代码:
1 #include
2 #include
3 #include
4 #include
5 #include
D题题意:
给你n个糖果,每一个糖果有一个种类,你需要用这些不同种类的糖果来弄成一个礼物
但是这个礼物里面各 种类 糖果的数量不能相同,你需要找出来这个礼物最多能由多少糖果构成
题解:
你会发现,如果一种糖果的个数是n,那么它可以拿出n-1、n-2、n-3来放入礼物中
注释+代码:
1 #include
2 #include
3 #include
4 #include
5 #include
E题题意:
给你一个长为n的字符串,你需要从中找出来k个不重复的子序列(注意是子序列而不是子串。子序列不需要连续,可以再原字符串中间删除字母)。如果可以找到输出你删除的总字母个数(你要是这个值尽可能地小),如果不能输出-1
题解:
如果直接暴力dfs,那就相当于2^100,肯定会超时,那我们注意到k的值比较小,所有我们就可以找到k个子序列就可以了。又因为题目有要求输出的值尽量小。所以我们就可以按删除字符从小到大来枚举
我这里采用set去重
代码:
1 #include
2 #include
3 #include
4 #include
5 #include