- 博客(14)
- 收藏
- 关注
原创 Codeforces Round 998 (Div. 3)
同理我们枚举 G 的每条边,如果连接的两个点在 F 中属于不同的联通块,那么我们需要添加这条边,记得在并查集中合并。题目要求对于 G 中存在路径的两个点,在 F 中也必须存在路径,不是两个点存在直连的边。我们先枚举 F 的边,如果连接的两个点在 G 中属于不同的连通块,那么我们要删除这条边;两个点存在路径,说明俩个点在同一个连通块。最终的要求就是把 F 的并查集通过修改,变成和 G 的并查集一样。,因此构造的数组当中非 1 的元素的个数最多为16 个。对于每个数 num ,可以构造的数组长度也需要枚举。
2025-01-23 20:25:32
1422
原创 牛客小白月赛109
的时间复杂度内找到离当前猪的陪伴时间端最近的没有交集的陪伴时间对应的那头猪,我们先按时间排序后,再dp,所以我们在有序的数组上用二分来快速查找。陪伴第 i 只猪的情况不好处理,因为陪第 i 只猪,陪伴时间段相交的其他猪可能有很多头,也有可能没有,因此在我们需要。:表示前 i 只猪中不陪伴第 i 只猪情况中,金钱与精力之和最少是多少。:表示前 i 只猪中陪伴第 i 只猪情况中,金钱与精力之和最少是多少。
2025-01-21 21:49:00
755
原创 Codeforces Round 997 (Div. 2)
在代码中,认定一个子数组为坏数组时,该子数组中一定要有x。不然会导致该子数组在x为其他值时,也会被计算,重复。现在,我们可以根据邻接矩阵的每一行确定了i前面和后面分别有多少个数,不就知道了i在排列中的具体位置。排序后中间的两个数一个小于等于x,一个大于x,所以一定不相等,因此为坏的。,那么对应的数组a为坏数组,如果数组a的长度为奇数,一定有。x与y之间不存在边,那么大的在前面。我们只需要考虑a的长度为偶数的情况,x与y之间存在边,那么小的在前面。
2025-01-19 16:24:03
587
原创 牛客周赛 Round 76
高一位为 0 当前位为 1 的位置,将该位置的 1 与高一位的 0 交换位置,并且之前枚举到的所有 1 从第 0 位向高位开始放置。,其实将所有的元素取最大公约数 小于等于 任意一对数取最大公约数,答案就是。我们知道 x 与 y 一一对应。我们可以用 dp 来求符合条件的最长的序列。开头的符合条件的最长序列, 我们知道 x 与 y 一一对应,那么 以。开头的符合条件的最长序列中第二个数 一定是。就是在二进制下,从低位向高位枚举,找到。要求最小的数组元素之和,那么找出最小的。子串短,就越可能出现更多次数。
2025-01-16 22:08:49
591
原创 Codeforces Round 996 (Div. 2)
剩下的我们只需要预处理出每行、每列的元素之和,以及每行、每列需要填充的元素个数,最后遍历一遍就能确定所有元素的值了。定义 x 为 第 i - 1 个稻草人驱赶乌鸦传送的位置,time 为乌鸦到 x 所花费的时间。所有稻草人一起移动所耗费的时间最短,并且使稻草人之间保持着 k 的距离最优。代码中将距离翻了一倍,来避免直接计算时间出现小数部分。题目说所有的行和列的元素之和都为。可以取任意值,为了方便也令。只能为 0 ,等式才成立;
2025-01-16 22:08:21
857
原创 牛客周赛 Round 75
可以获得额外的战斗力收益的英雄在同一组。表示前i个组花费不超过j选择人数不超过k获得的最大战斗力增益。要考虑的太多,就不写思路了。
2025-01-08 12:59:02
218
原创 Codeforces Round 929 (Div. 3)
如果找不到不是最小元素的倍数的数,那么最后的结果一定为0。因为其他元素都是最小元素的倍数,取模后的结果都为0。可能存在多个最小值,我们可以在数组中找一个不是最小元素的倍数的数,放在第一位,最小元素放在第二位。我们把数组中最小的元素放在最前面,操作最后的结果就为。对数组取模后的结果就为。
2024-12-31 22:03:46
628
原创 牛客周赛 Round 74
我们翻牌的情况是翻一张我们预知的牌,翻一张我们非预知的牌。要想在这种情况下必赢,就要使得非预知得卡牌种类不包含已经预知的卡牌的那种种类,即我们预知的卡牌数量一定等于某一种卡牌的数量。我们预知的卡牌数量如果不是最多数量的那一种,任然会有输的局面。因此,我们预知的最少卡牌是最多数量的那一种卡牌的数量。,我们翻的两张牌都是非预知的,一定必赢,这种情况下我们只需要预知。的子数组同样也是原数组的子数组或者是原数组的某段子数组的倒序。其他情况,预知的卡牌是随机的,要预知后必赢,,按上面的思路我们最少预知的卡牌数量是。
2024-12-30 21:56:00
1885
原创 牛客周赛 Round 73
我们可以将01字符串截断成多个恰好只包含一个字符1且以该字符1结尾的子串。后面的子串同上面一样构造即可。当01字符串的最后一个字符为0时,无解。因为1~n都出现了刚好n个数,一定是一个排列。证明的话,自己举个例子模拟一下。假设第一个字符1出现的位置为。的倍数,那么该区间大小。位置上出现的数字刚好是。位置上都是1,将排列。,刚好满足01字符串。非固定大小的滑动窗口。
2024-12-26 15:13:43
658
原创 Codeforces Round 995 (Div. 3)
数量不变,因此买树的人也不变。买树的人也不变,单价越高,总获利就越多,对于每个区间取区间取右端点(就是。变化时,不会导致差评数和不购买圣诞树的消费者数量变化**,因为前面小于当前价格的。,任意一个区间内变化时都不会导致该消费者差评或者不买圣诞树这两个状态变化。交换他们对应的元素也不会影响最后的结果,因此我们对数组排序。满足条件获利最多的时候,单棵圣诞树的价格一定是。对于单个消费者,当圣诞树的价格在区间。此时,数组具有单调性,我们可以枚举。对于所有的消费者,先把他们对应的。,当圣诞树的价格在区间**
2024-12-23 19:37:55
565
原创 UNIQUE VISION Programming Contest 2024 Christmas (AtCoder Beginner Contest 385)
数据范围很大,我们不能用数组来记录每个坐标是否有被走过。只能记录哪些坐标有房子,且在经过路径上的房子后删除这些已经经过的房子,防止重复计算。题目的意思是选取间隔相等高度也相等的建筑。因此,我们可以先枚举间隔,然后在对应间隔下找到符合条件的建筑。用map<int, set>来记录对应行(列)中房子的列(行)坐标。每次移动只会改变行坐标或者列坐标。我们先考虑纵向移动,即横坐标不变,纵坐标变化。,用lower_bound和upper_bound函数。,我们只需要在row[x]找到满足。根据数据范围直接暴力。
2024-12-21 23:43:37
1732
原创 Codeforces Round 982 (Div. 2)
为起点的多条有向边,我们只需要在这张”图“上进行一次DFS或BFS,找出能到达的最大的点,即为答案。(这里我改成了下标从0开始,符合平时的编程习惯)。因此,我们只需考虑原始数组。只要满足上面条件就可以在数组后面添零。我们可以用存图的方式存储当数组长度为。的元素,上述等式一定无法成立,因为。时,我们要如何选择才能让数组最长。时,我们可以将数组长度增长到。的边,上面的情况就相当于以。
2024-12-20 22:24:20
671
原创 hello 2024
假设题目给的序列可以确定构成一棵二叉树树,如果我们删除同属于一个父节点的两个叶子节点,那个该父节点到根节点的距离为两个子节点中到跟节点距离最小的那个节点的距离。因此,我们可以一直这个过程,直到序列最后只有一个元素且这个元素为0,那么就存在这样的一个树。因为同于父节点指向两个子节点的边权一个为1,另一个为0,所以从根节点到这两个子节点的距离的差为1.
2024-10-23 10:37:27
133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人