- 博客(6)
- 收藏
- 关注
原创 浙江农林大学acm集训队,2023级队长退役回忆录
之前备赛的时候经常看学长们的退役文章,看着前辈们光辉的历史总是幻想自己也能站在同样的地方,获得同样的奖牌。回想 2 年前初出茅庐的我,那个连自己为什么在打比赛都没有搞清楚的我,全然不知自己也会成为队长,自己也会拿下和学长们一样的奖牌,自己也能成为教练过了很久之后也会提及的对象。全然不知 ACM 会成为我人生中相当美好的一段经历。现在轮到我自己来写了,事情的起因是这样的:那天和队友们看了19级队长的退役文章,对其传奇的经历和轻小说一般的文笔感触很深。
2026-01-01 13:06:47
1596
6
原创 利用并查集跳过操作过的节点
而在合并时,根据定义,如果这个点未被赋值,那么fa[i-1]=find(i);首先,暴力的做法是遍历m个区间,每个区间的数字都扫一遍,未被赋值的那就将其赋值。这样的时间复杂度是n*m的,我们发现有很多重复扫描的现象,所以我们就想,如果能够得到这个节点后第一个被扫描过的区间的右节点就好了,这样就可以跳过中间的部分。我们可以轻易得得到所有1的个数,设1的个数为cnt,前cnt个位置都要填1,那么前cnt个位置中0的个数即为答案。首先分析题目,有一个01字符串s,然后字符串t是由字符串s的m个字串构成。
2024-10-06 11:24:37
226
原创 树形dp&贪心
这样问题就又抽象起来了,根据刚才的贪心结论,我们肯定希望所有的节点都可以配对,那么一旦出现x > sum的情况,我们肯定希望把尽可能多的节点在子树内提前配对,从而让x < sum。这个问题有一个贪心结论,设最大子树节点数为x,总结点数为sum,如果x > sum ,那么最优方式就是让其他子树的节点都和最大子树组,最大队伍数为sum。我们先来想想一个点可以和哪些节点组队,因为不能有祖先和后代关系,那么它不能和自己的子树组队,不可以和上面所有祖先组队。换而言之,一个节点它不同的子树之间是可以随意组队的。
2024-09-29 21:18:34
316
原创 模拟--不要被时间复杂度劝退
这里我们可以先用cnt记录长度,由于x<=1e9,我还是比较担心会有爆longlong的情况,这里cnt我直接使用__int128类型。首先我想到,要查询第k位元素我们肯定要先找到最大的长度不超过k的数组(二分查找),这样我们就可以对它取模,从而把里面重复的那部分忽略掉。可以发现,问题是具有递归性质的。2.不满足条件,那就会取模,这时原数字的大小已经被减去了x倍,x取决于数组翻的倍数(>=2),那么最多就是log2(1e18);操作完后,会进行q次询问,每次询问我们要回答这个数组第k位的元素。
2024-09-28 19:44:35
526
原创 注意力集中树形dp
由于刚才提到这样的集合在子树外的性质就可以看成和LCA等价的,考虑子节点都是叶子时,dp[x]=pow(2,m),m为子节点的个数。我们上面对这个集合有一个非常重要的隐藏性质:当集合中的LCA为x自己时,这个集合是子树x独有的肯定不会重复。不重复,因为这样的集合在子树外的性质就可以看成和它自己LCA等价,所以这时就相当于是把x也放到了集合内,也是专属于这个子树的,所以不会重复。而且在截至LCA这个子树之外,也不会有经过其他点能经过一个以上的点,那么这样的集合在子树外的性质就可以看成和LCA等价的。
2024-09-27 16:45:55
342
原创 异或运算&拆位
我们要找出最大的k,满足(al1⊕al1+1⊕...⊕ar1)∣(al2⊕al2+1⊕...⊕ar2)∣...∣(alk⊕alk+1⊕...⊕ark)≤x.显然这个操作之前只会出现前三种情况,所以我们必须保证x前面数位为0的位置,这个数也必须时0,不然就会大于。根据贪心的思想,我们可以从高位遍历到低位,保证这个数字是小于等于x的,看最多能放多少挡板。这种情况,我们将遍历整个数组,一旦发现这个数之前的区间异或和不大于截至这个数位前的x,那么就可以进行或操作,插入挡板。
2024-09-26 20:51:31
349
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅