手机码的,没用数学公式,可能阅读体验较差,见谅
1105练习赛
T1 斩杀计划
题目大意:
对一个数列有三种操作:
1.取出数列中一个小于等于2的数放入集合中,花费为1
2.取出数列中一个小于等于3的数放入集合中,花费为4
3.将数列中所有的数减去3,花费为1
现给出这个数列,要求在操作三最小的情况下,求出令集合中数大于等于m时最小的花费。
输出最小操作次数及此时的最小花费
给出的数列中所有数小于等于30000, m小于等于5000000,数列中数的个数在5000000以内。
没想到没想到没想到这真的就是一个普及难度的贪心。我更没想到这题要用桶排序其实是因为太久没用而且没地方用所以忘了。
解法:
从1开始枚举到30000(相当于枚举操作三的次数),每次把三个桶中的权值加入答案集合(因为取出的数只有1,2,3三种)。遇到当前答案集合的和大于m就弹出(这里注意有答案集合到最后也没有超过m的情况,要输出-1)。
计算一下两个取数方案的性价比,取3最次,取1中等,取2最赚。所以按性价比弹出方案,一直弹到再弹不能。此时就是题目所求ans。
注意在输出最小花费时要加上操作三的次数。
?
(注:题面中说到数据爆裂,所以必须用fread,正式赛场上应该不会这样搞)
?
代码先咕了
这次在下打的动归,居然拿到了90。鬼知道数据水成什么样子
?
?
T2 分割计划
题目大意:
把一个矩阵分割成两块,要求这两块里的任意一个点能到达到达其它点且路径上转向数不能超过一次。
求出所有满足条件的切割方案中,两块中数字的极差的最大值。
输出这些最大值的最小值。
矩阵长宽在2000以内,每个数在1e9以内
?
在下的语文实在太差,最好把题面要表达的东西分开写......
我看你是在为难我wx2004
?
此题爆零。根本没看出正确的解法。思考了1h+的动归,最后连暴力都没来得及打,最简单的单排数据的分也没拿到。
我寻思着你就天天只想动归呗。
自己反省Inf下吧
?
读完题面,那个熟悉的标志又出现了。
求所有满足条件方案中极差最大值的最小值。
所以。
这是一道二分答案。
惊不惊喜意不意外
至少对在下来说已经是很意外的了。
?
吹完了,现在是解法。
很容易看出,题目所给的限制要求:转向次数不大于1,其实就是指分出的区块中不能出现凹♂槽或者凸♂起。
对于给出的矩阵,在输入时求出矩阵内的极大值和极小值。(之后二分要用)
由于极大值减去极小值肯定是最大的极差,所以我们不能让Max与Min分在一个区块中。实现算比较简单的,之后二分的时候讲。
?
因题面提到要求最大值的最小值,便很容易联想到二分答案。所以我们二分一个极差(这个极差的范围肯定在0~Max-Min之内)。
接下来是最关键的Check操作:
因为我们二分了一个极差(记为x),所以肯定有:
(区块A为极大值所在区块,区块B为极小值所在区块)
- 对于区块A:Max-Map[i][j]<=x
- 对于区块B:Map[i][j]-Min<=x
又因区块中不能出现那两个带有哲学符号的构造,所以记一个_min值,表示当前排最多能飙多远(初始值为m)。在i->n,j->m的双重循环中每当遇到违反区块A条件的j时,就把_min设为当前的j-1,然后break。接着从_min+1开始搜到m,看剩下的数满不满足区块B的条件。只要搜到不满足就return0。
最后若找到了满足条件的分块方案,就return1。一直二分下去,就能找出当前矩阵满足条件的最小值。期望时间复杂度\(O(nmlog(Max))\)。稍微有点卡时间,但这确实能A。
?
那么有人(指在下)就要问了:“你这只讨论了每排长度单调不上升的情况啊。”
所以我们只用把整个矩形旋转一下,再用同样方法算就行了。
那么又有人(还是在下)就要问了:“一个矩形旋转90度该怎么用程序实现呢?”
直接旋转确实很难实现。那我们就不旋转,换个思路,从不同的方向把矩阵对称一下就好了。
一共有四种情况,所以要镜像对称三次,第一次左右,第二次上下,最后再来一次左右,即可求出所有情况的最优解。
在下果然还是太菜了
(注:题面中提醒本题数据依然爆裂,所以还是要用fread)
?
代码依然咕咕咕
wangdy带佬TQL
?
?
T3 阻击计划
题目大意:
给出一个由m条边、n个点构成的无向图,删去其中部分可被删除的边,使得不经过同边同点遍历所有点并回到出发点的路径中的边数不为偶数。
不能被删除的有n-1个。这些边能使所有点相互连通并仅有一条路径。
删除边会有花费,请求出总花费的最小值。
n在1000以内,m在5000以内,每条边的花费在10000以内。不能被删除的点花费为0。保证能被删除的点花费不为0。
同时,保证每个节点的入度不超过12。
?
由于本人实在是太弱,dalao在讲题时我几乎没跟上,所以本题题解本人应该写不出来。
似乎与弦图有关。
同时入度在12以内,所以考虑状压。
详询请膜hdhd与nodgd。
?
?
总结:
- 不要再做一些神奇的方法了。自信一点,万一你之前认为做不出来的方法正好就是正解呢?(当然在已经确认解法之后就不要再尝试其他解法了)
- 在做下一题时不要受到上一题的影响,换个角度独立思考。
- 懂得放弃。
- 但永不言弃。
?
*一想到明天有两场练习赛......
*你充满了决心
?
日常爆舔
原文地址:https://www.cnblogs.com/cooper233/p/11802687.html