百度之星 2017 资格赛 题解(原创)(2~5题 第一题方法是错的 第二题数据太水 并不会正解)
转载请注明出处http://www.cnblogs.com/nflslzt/p/7302377.html
(题目在HDU上可以找到)
题意 给你两个点集,A和B,问你在B中最少选取多少个点,使得B中剩余点的凸包能将A的凸包完全包住
数据范围 A,B中有500个点 多测 (n^3会超时)
想法
首先把两个点集的凸包求出来
贪心:B的凸包内部点全部可以去掉
可能(就)是伪证:若最优解中B的内部取了一点,设为C,且C与D,E相连,那么,去掉C,并在D,E之间寻找一点P(一定有点,否则是凹的),使得三角形DEP能完全包住三角形CDE即可
然后枚举B的凸包上的一点Q,并且二分地寻找两点M,N,使QM,QN均恰好不与A的凸包相交,继续令Q=M,Q=N,继续二分,这样可以找出满足题目要求的一个凸包. 枚举出所有的这样的凸包,比较即可.
错误原因 未考虑的情况
有没有大神告诉我正解 据说Claris用的是O(n^3/64)的方法
有没有大神告诉我正解
题意 给一个图,求最小割
数据范围 3000个顶点,100000条边,边权1000
想法
优化最大流
网搜了ISAP模板结果WA了
无聊时看看Clarifications,发现数据水
于是: 先判断是否连通,不连通输出0,否则枚举每个顶点,并计算与其相连的边的总权值,取最小值输出
期望时间复杂度 不说了,显然能过,显然非正解
题意
度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来。
邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力。
度度熊一共拥有m种攻击方式,第i种攻击方式,需要消耗k[i]的晶石,造成p[i]点伤害。
当然,如果度度熊使用第i个技能打在第j个怪兽上面的话,会使得第j个怪兽的生命值减少p[i]-b[j],当然如果伤害小于防御,那么攻击就不会奏效。
如果怪兽的生命值降为0或以下,那么怪兽就会被消灭。
当然每个技能都可以使用无限次。
请问度度熊最少携带多少晶石,就可以消灭所有的怪兽。
数据范围
1<=n<=100000
1<=m<=1000
1<=a[i]<=1000
0<=b[i]<=10
0<=k[i]<=100000
0<=p[i]<=1000
想法
一看数据范围,怪兽1000*10种可能,而且技能使用无限制,于是这题变得特别水
预处理:暴力枚举所有怪兽,背包算出最少要花多少晶石
输入每一种怪兽,加起来即可
期望时间复杂度 O(1000*10*1000)
题意
普通的01背包,但是要求还原路径,关键在于,不超过预算、不重样、午餐等分最高的情况下,选择菜品序号加和最小,加和相等时字典序最小的组合(限制条件太多,真心累)
数据范围 很水
想法
01背包
然后陷入僵局
发现数据很小,随便乱搞
于是从最后倒着推,用dfs,把所有情况搞出来,存起来,排序,输出
(据说有人啥都不搞直接输出过了,欲哭无泪)
期望时间复杂度 不知道
题意
定义了一个01偏串:1、只由0和1两种符组成; 2、在S的每一个前缀中,0的个数不超过1的个数; 3、S中0的个数和1的个数相等。
给定一个01偏串S,一个数n,问S在长度为n的所有01偏串中出现次数之和
数据范围 1<=|S|<=100000,1<=n<=1000000000
样例
input
2
2 10
4 10
output
1
3
样例解释
在第二个样例中,长度为4的偏串共两个1010,1100。10在1010中出现了两次,在1100中出现了1次。所以答案是3。
想法
最后才发现,和http://blog.csdn.net/jaihk662/article/details/76737701 的想法很像,只是公式不同
如图
期望时间复杂度 O(1000000*40)
转载请注明出处