- 博客(71)
- 收藏
- 关注
原创 ABC314总结
然而这题还要注意枚举的顺序,由于摊位随便选,所以相当于多重背包,可以选择多个相同物品,故应该顺序枚举。但是这题还有一个点比较ex,即S。这题有难度,考虑用dp来求期望。表示获得不少于v的分数的期望代价。所以需要列式计算……注意这里下标是max(0,v-S。
2026-02-02 11:49:21
39
原创 ABC 434 赛后总结
对于当前气球可能出现的区间[L,R]而言,假设相隔两个时刻的时间差为t,那么下一时刻气球可能出现的区间应为[max(1,L-t),R+t]。此题需要较强的离散数学功力,想到把x-r与x+r看作两个节点并连边,那么问题转化为:我们最多可以取多少个点,使得每一条边都能找到唯一的点与之相连,且每一个点都至少要有一条边与其配对。那么先考虑从G中抽离出一个子树T,由于有环,那么对于树T而言,之前取不到的那个节点就可以取到了,那么此情况是至多可以取到n个节点。依旧是关注题目的位置,D题也不复杂,往简单了想。
2026-01-23 13:54:42
156
原创 数据结构基础练习
贪心地考虑,越是高位越要大。出现了一个比当前位置大的数,那么就要让这个数尽量往高位走,替代掉那些没自身大的却身处高位的数,这样的想法类似于单调栈。取完一组后直接删除就行了,类似于链表的删除,倘若有新的异性对产生,直接加入堆中即可。但是已经取出的人所在的异性对不能再用了,要打上标记,出堆的时候直接跳过。不妨从反面考虑,取出每一条线段上的所有整点存储下来,然后统计每个点出现的次数,如果大于等于2,那么必然是交点,计数器加一即可。T1:洛谷P10907。T2:洛谷P1878。T3:洛谷P8082。
2026-01-23 13:54:10
175
原创 概率与数学期望
做位运算的题目,首先想到按位计算,即通过枚举每一位的情况来计算。算期望首先要算概率,考虑抽区间的概率。随机等概率抽取1-n内的两个数,概率显然各为1/n。但是要考虑两个数相同以及可以交换的情况,所以若两数相同就是1/n。这题的思考方式与上题类似,考虑用记忆化搜索的动态规划来做。每次把未来未知的期望值当作已知量来计算是核心所在。and和or的求法较简单,难点在于xor。本题的特点是难在求值,而概率是定值,所以其实本质上还是考察位运算的性质。例题1:AcWing 217.绿豆蛙的归宿。,若两数不同则为2/n。
2023-08-18 22:58:26
288
原创 ABC 308总结(7.1)
我们一看mex函数的计算方法,似乎没有任何数学规律可循,所以要考虑采用巧妙的数据结构与预处理来解决这个问题。首先考虑枚举所有中间字母E,然后我们只需要获得这个位置前面所有的M以及后面所有的X的数量即可。但是我们还要考虑a值的影响,所以应当将不同a值的M与X分开计算。即统计一下不同a值的M的数量的前缀和以及不同a值的X的数量的后缀和即可。C题就出问题确实没想到,本题的技巧在于,分数比较采取交叉相乘比较法。F题已经在贪心算法博客中提过了,不再赘述。D题秒了,简单的bfs题。一道有点东西的计数题。
2023-08-15 18:57:19
363
原创 ABC 309(7.8)
实际上这题也不是非常困难,关键在于写代码写的好不好。其实每次只要考虑自己父亲传下来的保险和自己本来买了的保险就行了,然后就是一代代往下传并不断累加答案。
2023-08-15 18:51:49
260
原创 ABC 312总结
这题的设dp方式比较特殊,观察每一个合法的括号序列,可以发现:不管从哪个位置将序列断开,左半段序列必然满足:左括号的数量≥右括号的数量。那么这样可以得到一个dp方法:f表示我们枚举到了第i个位置,且当前左括号的数量比右括号的数量恰好多j个的序列数量。那么容易知道:f=f+f(s[i+1]=‘?最终答案就是f,初始化只需令f=1即可。
2023-08-12 14:57:06
235
原创 「ZHYOI」Round 3
这题是先猜后证的典例。首先想到这题把所有的边连起来必然是不合理的,考虑删去无用边。猜想:连接两个不能整除某一方的两个节点的边是无用的。可以证明,在a与pa间塞入一个节点x,那么x与a的边权≤a/2,x与pa的边权也≤a/2。(不是很严谨,但无所谓)进一步可以只保留质数倍的两点相连。
2023-08-12 14:39:10
106
原创 ABC 306总结
找出集合A中所有元素在集合A∪B中的排名之和,实际上就是找A∪B中小于等于自己的元素个数。那么由于A与B没有交集,所以可以分开来做。这部分推导并不困难,关键在于后续的维护。一道有点坑的数据结构题。考虑采用类似于“对顶堆”的写法,将前k个数存在一个堆里,后面的数存在另一个堆里即可。具体操作考虑到要删除,所以不考虑用优先队列,采用multiset。注意,multiset中的erase函数若在括号中填数值x,那么会把所有值为x的元素删去。若想至多删除一个元素,那么考虑采用s.erase(s.find(x))。
2023-08-11 20:31:02
158
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅