Codeforces
文章平均质量分 79
Codeforces算法刷题
重生之我是cxk
这个作者很懒,什么都没留下…
展开
-
Codeforces-Round-895-Div-3
你有两个装有水的容器。第一个容器含有a克水,第二个容器含有b克水。这两艘船都非常大,可以容纳任意数量的水。您还有一个空杯子,最多可容纳c克水。一次,您可以从任何容器中舀出c克水,然后将其倒入容器中。请注意,一次倒入的水的质量。使容器中水的质量相等所需的最少移动次数是多少?请注意,您无法执行除所描述的移动之外的任何操作。原创 2023-09-09 13:03:33 · 388 阅读 · 0 评论 -
Codeforces-Round-891-Div-3
给你一个由nnn个整数组成的数组。您的任务是确定是否可以将其所有元素着色为两种颜色,使得两种颜色的元素之和具有相同的奇偶性,并且每种颜色至少有一个元素着色。例如,如果数组为[1,2,4,3,2,3,5,41,2,4,3,2,3,5,41,2,4,3,2,3,5,4],我们可以将其着色为:[1,2,4,3,2,3,5,4\color{blue}{1},\color{blue}{2},\color{red}{4},\color{blue}{3},\color{red}{2},\color{red}{3},\co原创 2023-08-08 13:26:29 · 718 阅读 · 1 评论 -
Codeforces-Round-883-Div-3
链接:https://codeforces.com/contest/1846。原创 2023-07-08 18:10:34 · 734 阅读 · 0 评论 -
Educational-Codeforces-Round-147-Rated-for-Div-2
给你一个字符串,每次可以删除若干个字符,但是这些删除的字符不可以是连在一起的,至少要间隔一个,问你最少删除多少次,可以使得整个数组中的字符都是相同的。很显然,如果数组只剩它,那么这种情况下需要操作的次数应该为两个这个字母中间夹着多少个其他字母,即这两个坐标之间的差值-1,设这个值为len。将每个字符出现的左边记录在一个哈希表中,first为字母,second为一个vector,记录的是这个字母出现的坐标。给你两个数组,第一个是原数组,第二个是经过a数组排序后的数组,问你最长排序的区间是哪个。原创 2023-05-04 21:48:15 · 261 阅读 · 1 评论 -
Codeforces-Round-863-Div-3-E-Living-Sequence
我们可以先将原来要求的数变成一个9进制数,但是结果里不应该含有4,所以需要再将大于等于4的部分变成对应的映射,即加1。原来十进制每位上可以为:0 1 2 3 4 5 6 7 8 9,共10个,把所有有4出现的数字都去掉了,显然每一位上面只会有9个数字出现。所有的整数,去掉出现4的数,问你第k个数是多少?现在去掉一个4,就相当于变成了9个,即9进制。原创 2023-05-04 21:47:40 · 106 阅读 · 0 评论 -
Codeforces-Round-834-Div-3-E-The-Humanoid
显然需要贪心,从小到大进行排序,先吃小的,再吃大的,只有在我们当前的h比宇航员的a [i]小的时候,我们才会去使用药水,因为只有三瓶药水,我们可以去枚举✖️3的药水在什么时候喝,先喝,第二个喝,最后一个喝,即可。对于每组数据,在单独的一行里输出一个整数,表示人形生物可以吸收宇航员的最大数量。请你帮他算一算,如果他用最佳方案进行操作,他最多能吸收几名宇航员的能量?能量的宇航员被吸收时,这名宇航员消失,人型生物的能量增加。单位能量的邪恶的人形生物来这里吸收宇航员们的能量。, 表示每名宇航员的能量。原创 2023-05-04 21:25:37 · 169 阅读 · 0 评论 -
Codeforces与洛谷题目之间跳转油猴插件
Codeforces与洛谷题目之间跳转油猴插件。方便OI和ACM进行刷题原创 2023-05-04 21:23:28 · 1011 阅读 · 0 评论 -
Codeforces-Round-826-Div-3-E-Sending-a-Sequence-Over-the-Network
1 1 1 3 对于序列 1 1 1来说,它的长度3 写在了右边。3 1 1 1 对于序列1 1 1来说,它的长度3写在了左边。将数组a分成若干个序列(连续,完全覆盖,可以想象为切开)对于每个序列来说,它的长度被写在了左边或者右边,例如。如果以第i个数结尾的集合是合法的记为1,不是记为0。这两种都是符合题意的,可以写在左边也可以写在右边。最后分成的序列能不能满足上面的条件。个数结尾的前缀合法方案的集合。原创 2023-05-04 11:25:55 · 389 阅读 · 0 评论 -
Codeforces-Round-805-Div-3-E-Split-Into-Two-Sets
所以还剩下一种情况就是每个数字出现的次数不超过两次,并且同一组里的数字不同,我们可以将同一组里的两个数字看成是敌人,进行判断1 和3 是否在同一集合,显然在同一集合,说明他们是朋友,而不在同一集合说明是敌人。1和2是敌人,2和3是敌人,1和3是敌人,显然冲突,出现错误。举个例子:1和2是敌人,2和3是敌人,则1和3应该是朋友。1和2是敌人,2和1 是敌人,显然没有冲突。1和2是敌人:连线1-5,2-4。2和3是敌人:连线2-6,3-5。例如1-2,2-3,1-3。例如1-2 ,2-1。原创 2023-05-04 11:24:06 · 337 阅读 · 0 评论 -
Codeforces-Round-797-Div-3-D-Black-and-White-Stripe
给你一个长度为n的字符串,只包含B和W,每次操作可以将一个W变成B,问最少进行多少次操作可以得到连续的k个B。再去从头到尾扫一遍,以第i个数结尾的连续k个B,所需要的最小代价应该为。利用前缀和数组,如果是W,值就是1,然后从前往后求一遍前缀和。脑子抽了,想半天没想出来这么简单的问题。原创 2023-04-25 19:08:07 · 96 阅读 · 0 评论 -
Codeforces-Round-827-Div-4-G-Orray
假设当前的前缀或为res,因为要想让数变大,所以我们肯定会尽可能多选能让res变大的数,这个过程最多只会进行30次,因为。因为两个数会进行或操作,在或运算中,有1得1,全0为0,所以两个数进行或运算只会变大,而不会变小。给你一个长度为n的非负整数数组,问你能不能重新排序,使得前缀异或数组是字典序最大的。这题我看错题目了,一开始以为是异或操作,所以就想的复杂了。次排序,选出我们想要的数,剩下的任意输出就可以了。,因此我们最多会进行。原创 2023-04-24 12:31:14 · 105 阅读 · 0 评论 -
Codeforces-Round-827-Div-4-F-Smaller
因为一开始都是a,所以一旦b中出现了一个大于a,那么肯定可以把这个大于a的放在第一位,此时t的字典序一定会小于s。如果b中没有出现过一个大于a的字符,那么说明b一定全是"a",此时如果s的长度>=t的长度,那么 s的字典序一定会大于t,因为b全是“a”,一定已经是最小的了,如果s的长度原创 2023-04-24 12:30:58 · 64 阅读 · 0 评论 -
Codeforces-Round-817-Div-4-G-Even-Odd-XOR
一种可能的思路是:先将前n-1个元素随便放,然后最后一位放前n-1个元素的异或和,这样就可以保证整个数组的异或结果为0,但是这样操作存在一个问题,就是不确定前n-1个元素的异或结果是否已经在数组中出现过了。为了解决上述构造过程中存在的问题,可以将前n-3位就设置为i,然后考虑最后三个数,对于倒数的三个数来说,可以设置。要你构造一个长度为n的数组,元素不能重复,使得奇数位置异或的结果等于偶数位置异或的结果。这样就可以保证前n-1位异或的结果不会在前n-1位中出现。,则整个数组进行异或后的结果应该为0。原创 2023-04-24 12:30:06 · 71 阅读 · 0 评论 -
Codeforces-Round-817-Div-4-E-Counting-Rectangles
因为长度和宽度的范围很小,因此我们可以使用二维前缀和算法,将长度和宽度的乘积存入对应的二维数组中去。然后对于每个询问,就相当于问在范围。如果是使用 vector a(N, vector(N));,那么二维数组的元素初始化都是0。如果是用vector a[N];这种方式是不会对元素进行初始化的,因此在赋值的时候不可以使用+=问你这个长度能包含的矩形的面积和为多少,即。每组询问包含两个长宽,分别为。可参考二维前缀和模版,之间的元素和为多少。原创 2023-04-24 12:29:47 · 102 阅读 · 0 评论 -
Codeforces-Round-717-Div-2-B-AGAGA-XOOORRR
在本题中,可以看出本题的一个性质是最后的数组大小不会超过三,因为如果超过三个相等的元素,那么他们之间一定可以通过运算减少元素的个数。给你一个长度为n的数组,每次可以选择相邻的两个元素进行异或,并且把这两个元素替换为异或之后的结果,问最后能不能把这个数组变成元素都相同的数组。异或:对应二进制位,相同则为0,不同则为1。原创 2023-04-24 12:29:03 · 40 阅读 · 0 评论 -
Codeforces-Round-835-Div-4-G-SlavicG-s-Favorite-Problem
给你一棵树,边与边之间有权值,从a出发,每次经过一条边,就对边的权值进行一次异或操作,问最后到达b的时候,这条路异或的结果能否是0。然后可以去判断b走过的值能不能和a相等,如果相等,说明肯定可以找到一条合法路径,a->i,i->j,j->b。可以从a点开始,对走过的路径进行异或操作,开一个数组w1,存从a异或到这个点的值,在走的过程中,可以进行一次传送,可以到达任意一点,但不可以是b点。第二次从b点开始,进行异或操作,也存下来,可以存在哈希表中。原创 2023-04-24 12:23:48 · 56 阅读 · 0 评论 -
Codeforces-Round-817-Div-4-F-L-shapes
暴力:依次去遍历每个*,看这个 *所在的区域是否合法,如果不合法直接输出NO,否则就把这个区域的三个 *打上标记,防止重复访问。在一个n*m的网格里面放L形,可以旋转,但是L之间不可以相连,点也不可以相交,问给定的图形是否合法。我们只会访问到每种L形第一次出现的*,一共有下面四种情况。原创 2023-04-24 12:20:51 · 56 阅读 · 0 评论 -
Codeforces-Round-849-Div-4-G2-Teleporters-Hard-Version
因此在选择传送器的时候,我们可以利用贪心的思想,优先去选择代价最小的,因此需要按照代价从小到大进行排序。因为我们的代价数组里面有n-i+1,这种情况是需要先进行一次传送才可以有的,因此我们可以先去枚举第一次使用哪个传送器,然后看用完这个传送器剩下的价值里面还可以去使用多少个传送器。的位置,每次可以向左或者向右移动一格,这个操作的花费是1,现在给你c个花费,问最多可以使用几次传送门。先不考虑初始位置是0,假设我们现在就在0或者n+1的位置,那么对于第i个传送器,显然它的代价最小值为。原创 2023-04-24 12:19:55 · 89 阅读 · 0 评论 -
Codeforces-Round-799-Div-4
给你一个长度为n的数组,需要你找一个连续的子序列,这个子序列中比如4 3 4,要求这段里面出现次数最多的数字减去其他数字的个数,这个值最大是多少,区间的左右断点是多少。把当前数字对答案的权重看成1,其他数字看成0,就是求子序列和的最大值。,问这些的连续序列有多少个。原创 2023-04-24 12:15:50 · 62 阅读 · 0 评论 -
Codeforces-Round-790-Div-4
套逆序对的模版即可,求逆序对应该还可以用树状数组的。仔细研究发现其实就是求逆序对,只不过是求。原创 2023-04-24 12:14:04 · 35 阅读 · 0 评论