自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 Codeforces Round 982 (Div. 2) B. Stalin Sort

斯大林排序是一种幽默的排序算法,旨在消除那些不合适的元素,而不是费力去正确排序,从而实现 O(n) 的时间复杂度。其过程如下:从数组的第二个元素开始,如果它严格小于前一个元素(忽略那些已经被删除的元素),那么就删除它。继续遍历数组,直到它按非降序排序。例如,数组 [1,4,2,3,6,5,5,7,7] 在经历斯大林排序后变为 [1,4,6,7,7]。我们将一个数组定义为脆弱的,如果你可以通过反复对它的任何子数组应用斯大林排序,按非递增顺序对其进行排序,且需要的次数不限。

2024-10-27 20:50:54 927

原创 Codeforces Round 982 (Div. 2) C. Add Zeros(dfs)

给定一个初始包含 n 个整数的数组 a。在一次操作中,你必须执行以下步骤:选择一个位置 i,使得 1 < i ≤ |a|,并且 ai = |a| + 1 - i,其中 |a| 是数组的当前大小。在 a 的末尾添加 i - 1 个零。在执行任意次数这样的操作后,数组 a 的最大可能长度是多少?

2024-10-27 20:38:54 411

原创 Codeforces Round 981 (Div. 3) D. Kousuke‘s Assignment

在和樱子一起出去玩后,幸介非常害怕,因为他忘记了他的编程作业。老师给了他一个包含n个整数的数组a,并让他计算数组a中不重叠的美丽区间的数量,所谓美丽区间是指区间[l,r]满足al+al+1+⋯+ar−1+ar=0的情况。对于一个固定的数组a,你的任务是计算出最多有多少个不重叠的美丽区间。

2024-10-25 21:21:39 465

原创 Codeforces Round 981 (Div. 3) C. Sakurako‘s Field Trip

即使在大学,学生们也需要放松。这就是樱子老师决定去野外考察的原因。众所周知,所有学生将排成一行。索引为 i 的学生有一些兴趣话题,用 ai 表示。作为老师,您希望尽量减少学生排队时的干扰。排队的干扰被定义为有相同兴趣话题的邻近人数。换句话说,干扰是指满足 aj=aj+1 的索引 j 的数量(1≤j<n)。为了做到这一点,您可以选择索引 i(1≤i≤n),并交换位置 i 和 n−i+1 的学生。您可以进行任意次数的交换。您的任务是确定通过上述操作任意次数后能够实现的最小干扰量。

2024-10-25 21:01:59 405

原创 Codeforces Round 981 (Div. 3) B. Sakurako and Water

B. 樱子和水每个测试的时间限制为2秒每个测试的内存限制为256兆字节在与浩介的旅途中,樱子和浩介发现了一个可以表示为n×n矩阵的山谷,其中第i行和第j列交汇处是一座高度为aij的山。如果aij0,那么那里就有一个湖。浩介非常害怕水,所以樱子需要帮助他:凭借她的魔法,她可以选择一个方形的山区,并将该区域主对角线上的每座山的高度增加一个。更正式地说,她可以选择一个子矩阵,左上角位于ij处,右下角位于pq处,满足p−iq−j。然后,她可以将ik。

2024-10-25 20:41:39 2000

原创 Codeforces Round 980 (Div. 2) C. Concatenation of Arrays

给定 n 个数组 a1, a2, …, an。每个数组的长度都是2。因此,ai=[ai,1, ai,2]。你需要将这些数组连接成一个长度为 2n 的单一数组,以便使结果数组中的逆序数最小。注意,你不需要实际计算逆序的数量。更正式地说,你需要选择一个长度为 n 的排列 p,使得数组 b=[ap1,1, ap1,2, ap2,1, ap2,2,…, apn,1, apn,2] 中的逆序数尽可能少。数组 c 中的逆序数是指索引对 i 和 j 的数量,其中 i<j 且 ci>cj。

2024-10-21 12:56:15 937

原创 Codeforces Round 980 (Div. 2) B. Buying Lemonade

最开始只能每一个按钮都按,而如果某次按到了某个按钮却没有饮料,那么这个按钮对应的位置已经没有饮料了,以后就不再按它。而按的顺序一定是先从头按到尾,再从头按到尾,并注意有的按钮已经不出饮料了但是还是要按一次。我们排序,遍历,每遇到更大的数字就比较。有个小技巧是定义数组长度为n+1,这样可以避免判断开头。

2024-10-20 20:57:24 698

原创 Codeforces Round 979 (Div. 2) C. A TRUE Battle

对于相同的两个布尔值,or和and都不能改变它们,而对于Alice,他倾向于向01之间加入or,Bob则想加入and。一开始我想比较1和0的多少不就行了吗,但是不对,当你加入一个运算符后,不能马上结算,因为or和and没有结合律,但是它们可以分别结合,并且and的优先级高。有一个性质,就是如果or的一边有一个1,那么另一边无论是什么最终都是1,所以我们只要保住一个1就行了。否则看中间是否存在至少两个连续的1,如果有,那么Alice先手在中间放or,最后总能用两个or把一个1保护起来,这样最后一定是1。

2024-10-20 20:24:50 573

原创 Codeforces Round 979 (Div. 2) B. Minimise Oneness

很明显,所有子序列中不是全为0就是至少有一个1,所以算出子序列总数,再让全为0的子序列数量接近它的一半。子序列不要求相邻,只要求相对位置不变,而在这个题目中又只需要考虑0,那么只用看0的个数。层杨辉三角之和减一,而长度加一,子序列总数至少翻倍,所以0的个数为n-1就行了。的01字符串,使得全为零的子序列和至少有一个1的子序列的数量之差的绝对值最小。由杨辉三角发现,长度为。

2024-10-20 20:02:31 560

原创 Codeforces Round 979 (Div. 2) A. A Gift From Orangutan

最大最小值相等,肯定为零,而我们把最大和最小的放在前两个,因为极差一定是最大的,结果就是n-1个极差。排列一串数字,使得对于所有。的最大最小值之差的和最大。

2024-10-20 19:54:05 186

原创 Educational Codeforces Round 170 (Rated for Div. 2) C. New Game(单调队列/滑动窗口)

且同时又没有连续,那么连续的这个条件可能会被忽略。第一次提交超时了,可能是因为使用unordered_map存在较多冲突,所以改成map就很稳定了。由于数据是无序,且需要找非递减,所以可以排序,但是我们又不想保留太多相同数字,于是先哈希计数,再把键值对存储到一个数组里,再排序,排序方法是根据。的大小排序,然后使用两个限制条件的滑动窗口,如果条件符合,则扩大窗口(r++),如果超过。要注意的是,因为要求连续非递减的条件比较严格,要先判断,如果长度超过。则缩小窗口(l++),如果数字不连续,l直接跳到r处。

2024-10-16 11:55:59 546

原创 Educational Codeforces Round 170 (Rated for Div. 2) B. Binomial Coefficients, Kind Of

杨辉三角的变式,由左上加上改为左上加左。找规律,发现同一竖行值相同,那么只和。

2024-10-16 10:53:23 312

原创 Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round) B. Maximize Mex

直到不与其他数重叠,然而超时了,然后我们发现不用一个个加,只用储存它模。只会影响后面的,另外,我们知道,只有重复多余的数才能加。我一开始从头到尾遍历,发现有重复的就不断加。给定一个数组,你可以任意给它们加上。,存到哈希表里,再访问它模。容易知道,给一个元素加上。

2024-10-06 21:08:46 859 1

原创 Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round) A. Meaning Mean(贪心)

如果你把这个过程写成算式会发现,结果就是所有数字相加,只不过每个数字被除以2的次数不同,而且越在前面的数被除得越多,所以可以排序,从最小的开始操作。我使用的是优先队列,因为我觉得每次要取最小值,然后又要插入,特别适合优先队列,但是后来发现不用,因为每次插入的那个数仍然是最小的。向下取整加入数字末尾,最大化最后剩余的数字。给定一个数组,你每次能选择两个数。

2024-10-06 17:02:40 569

原创 Codeforces Round 975 (Div. 2) C. Cards Partition

这个条件乍一看有点复杂,单看每一组不知道要装什么数字,那么先关注一些必要条件,首先所有卡片的总和要整除每组的容量,并且每种卡片的卡牌数量都不能超过组数,否则由于抽屉原理,肯定会存在有卡片没地方装,被迫和自己兄弟挤在一起。这时候你发现这些就是充分条件,想象你把每种卡片尽可能地放在不同组中,一层层地放满后,一定能够成立,不会有冲突。张任意已给出种类的卡片,使得它们可以被分成若干组,每组容量一定,且同组内不存在相同种类的卡片,求出最大能成立的容量。给出若干种卡片,每种卡片有一定数量,你可以加入不超过。

2024-09-28 21:44:06 921

原创 Codeforces Round 975 (Div. 2) B. All Pairs Segments(组合数学)

在它右边(或自身),那么这个区间就能包含这个数;对于两两之间的数也是类似的,只是它们不会成为边界。任意两数之间都能组成区间,那么我们要做的绝对不是遍历这些区间,因为复杂度过高,应该是用数学方法分析。观察题目,数组中已给出的数字和两两之间的数字一定是要分开讨论的。对于已给出的数字来说,只要边界。给出一个数组,数字两两之间能组成一个闭区间,给出若干次查询,问恰好包含于。展开分析,而是对数组中的各个数字分析,将得出的答案存储起来,以供查询。的范围很大,所以不是对每个。在它左边(或自身),边界。

2024-09-28 21:19:21 923

原创 Codeforces Round 975 (Div. 2) A. Max Plus Size

第一次提交wa了,因为最大值可能存在于多个位置,而我只找了第一个,应该把所有最大值找出来,看有没有下标为偶数的。可以给一些数字涂为红色,但是红色不能相邻,设得分为被标为红色的最大数字,加上红色数字的数量,求最大得分。然后考虑最大红色数字,在偶数的情况下,我们一定能选到数组中的最大值,然后再加上。先考虑最大化红色数字的数量,也就是隔一个涂一个,如果是偶数个数字,那么就是。然而在奇数的情况下,取到最大值时不一定能取到最大的。,这取决于最大值的位置。

2024-09-28 15:45:46 824

原创 Codeforces Round 962 (Div. 3) C. Sort(前缀和)

不同字符个数,但实际上是不对的,前缀和能够直接存储总和,因为总和只看这个数字,而与具体这个总和包含了哪些数字无关,而不同字符个数就不一样。所以我们是存储每个字符的差异数,然后查询的时候再计算总的差异数。并且由于最多只有26种字母,所以时间和空间复杂度不会太高。一看到有多次查询某个区间的操作,就想到前缀和,问题是如何存储。的含有的不同字符个数。给出两个字符串,查询。

2024-09-27 10:34:47 551

原创 Codeforces Round 974 (Div. 3) D. Robert Hood and Mrs Hood

来得到在左边结束的和在右边开始的,因为这些区间是绝对不会覆盖我们想要找的区间的,而剩下的区间要么在我们所求的区间开始,要么在这结束,就是我们要找的。有若干项任务,都会占用连续的时间,兄弟和妈妈分别会来。也就是求每一段时间内共经历了多少种任务。天,兄弟来的时候任务要多,妈妈则相反。(这是jiangly的思路和代码)的数量的后缀和,因为我们要仅通过。

2024-09-22 20:49:25 577

原创 Codeforces Round 974 (Div. 3) C. Robin Hood in Town(排序)

(要注意的是,我一开始在第四个用例wa,后来发现是使用accumulate函数时从0开始累积,导致溢出,改成0LL就行了),可以移项使得除法换成乘法,这样都可以使用整型计算。实现严格大于的方式就是在等于的情况下加一。问最大的那个元素要加多少才能使数组中有超过一半的元素小于平均值的一半。就可以获得中位数,如果长度是偶数则获得的是中位数的第二个。排序,因为题目涉及中位数,

2024-09-22 10:22:11 1340 1

原创 Codeforces Round 974 (Div. 3) B. Robin Hood and the Major Oak

是偶数那么产生的叶子也是偶数,否则奇数,由于只能存在。由于只关注奇偶,那么就可以简化了,如果。天,求最后的数量是否是偶数。个树叶,每个树叶能存活。

2024-09-22 10:06:38 571

原创 Codeforces Round 973 (Div. 2) C. Password Cracking

说明已经构建到了最右边,那么开始向左边构建。(写这题的时候一直不对,后来发现是忘记cin >> t了,归根结底还是不熟悉交互式编程的输入输出方式)猜一串二进制密码,每次可询问某串字符是否是密码的子串。从左到右不断构建ans字符串,每次不是加。,这可以通过询问得到。

2024-09-21 21:23:20 936 1

原创 Codeforces Round 973 (Div. 2) B. Battle for Survive

前面的所有数都要被消去,最差的情况就是全部减到最后一个数上,而每用前面的一个数减到除最后一个数外的另一个数上,那么就相当于加在最后一个数上,我们可以全部减到倒数第二个数上,再减到最后一个数上。相当于最后一个数减倒数第二个数,再加上其他所有数。容易看出,最后剩下的一定是最后一个数,因为最后一个数一定不会被消去,又已知最后只剩下一个数,那么就是最后一个数。把题目的操作翻译一下就是拿一个数去减后面的一个数,然后前面这个数会消掉。最小化最后剩下的数。

2024-09-21 20:59:46 597

原创 牛客背包问题练习 xinjun与阴阳师

有一定体力,有n种模式,每种模式又有几种操作,每个操作有对应价值和体力消耗,每种模式只能最多选一种操作,求最大价值。选与不选,也就是背包问题,只不过比传统的背包问题多了一些可选项,并且优化成一维的dp数组。

2024-09-17 21:43:45 330

原创 Codeforces Round 299 (Div. 2) B. Tavas and SaDDas(组合数学)

直接暴力数复杂度太高,实际上就是看有多少种4和7组合。当然数组合也不能乱数,为了思路清晰我是从大数位往小数位(用字符串输入就是从头开始遍历)比如4747,先看4000,显然后三位数有8个幸运数,再看700,后两位有4个幸运数,因为最高位是7,还要乘2,以此类推。另外还顺便写了快速幂,也就是a不断平方,如果b的二进制位为1则把a乘到ans上。给出一个“幸运数”,每一位都是4或7,问这是从1开始第几个幸运数。

2024-09-17 21:30:46 320

原创 Codeforces Round 889 (Div. 2) B. Longest Divisors Interval

区间,这是因为一个数的倍数的出现是有周期的,那么如果一个区间大于这个周期,那么一定存在一个倍数。如果要找的区间存在于1-n某个未知的位置,那么几乎没有足够快的算法。给定一个数n,找出一个最长区间使得这个区间内都是n的因数,输出长度。的所有数一定有倍数位于。

2024-09-17 21:03:26 431

原创 牛客周赛 Round 60 折返跑(组合数学)

之后的关键在于怎么实现计算。计算组合数要涉及阶乘,阶乘每次计算费时间,那么我们可以用数组把阶乘计算结果储存起来 ,可以利用动态规划辅助计算。由于组合数设计除法,不方便取模,所以要计算逆阶乘,使用费马小定理,另外还需要快速幂计算乘方。次杆子,每次都向中间推,不能推零次,问有多少种推法(mod 1e9+7)。一个高中学过的组合数学问题,实际上就是把。(不算两头)个位置分配给。

2024-09-16 13:11:43 1499

原创 牛客周赛 Round 60 我们N个真是太厉害了

我们发现,当遍历到某个数时,不成立的条件就是这个数大于当前要组成的数now,为什么呢?因为如果等于那不用说,如果小于,那么必然可以和之前的数组合,形成now,因为这个数和now之间的差肯定在1到now-1之间,而1到now-1有已经被之前的数组成了。这也是一种dp的思想。n个数无序,先排序,因为我们想从最小的数开始,看看能组成到哪一个数,题目也提示我们了,要找到最小的不能组成的数,那就要从小开始。给你n个数,是否能够通过相加组成1-n的所有数,如果不能,求出最小的不能组成的数。

2024-09-16 10:43:31 479

原创 牛客周赛 Round 60 连点成线(哈希+模拟)

定义两个哈希表,一个储存所有不同x及每个相同x下对应的不同y,另一个则相反,这其中也有并查集找等价类的思想。然后分别遍历两个表,找出最大减最小。这是有限制地找最值,,与其暴力模拟时查看限制条件是否成立,不如一开始就把它们挑出来。给出若干个点(x,y),若两个点之间x或y坐标相同,则可以连线,求最长连线。

2024-09-16 09:37:37 519

原创 Codeforces Round 972 (Div. 2) B2. The Strict Teacher (Hard Version)(排序+二分查找)

学生必然会被框定在某个范围内,不可能突围,如果学生在两个老师之间,那么他最多且一定能跑到中间,因为他们的速度一样,没有包围那就永远无法追上,当到达中间后,不管往哪边走都是自寻死路,需要的步数为中间的格子数除以2,向上取整;实现方法就是先排序,这样就方便分析老师之间的相对位置,要找到学生两边的老师的位置,只需要使用upper_bound()就行,复杂度nlogn基本符合题目数据范围。一维空间内,有若干老师,学生在某个位置,双方每次最多移动一格,且都在最优走法下,多少步能抓到学生。

2024-09-15 15:43:55 716

原创 牛客练习赛128 Cidoai的平均数对(背包问题)

首先,观察到b小于给定平均值k的数对一定可以选,因为传统的背包问题的空间固定,不管装哪一个,空间总是减少的,而这道题目反而是增加的。选完后把没选的装进数组里,记录已有的sum,并且你选择的每一个b小于k的数对都会节省一定的空间,也就是k - b,可供后面的使用。在一些数中选出某些数,也就是说每个数只有选与不选两种状态,容易想到背包问题,不过问题在于,所谓“背包”的容量是与所选的数对数量相关的,不是固定的。给出n对数(a, b),请选出一些数,求在b的平均值不超过k的情况下a的和的最大值。

2024-09-14 11:40:46 621

原创 Codeforces Round 703 (Div. 2) B. Eastern Exhibition(仓库问题)

为什么这样做能够成立呢?因为所算的曼哈顿距离本身就是两个轴上距离的线性叠加,并且展会位置的选择是完全任意的,不受x,y的限制,因而可以同时在x,y上取到最小值。经典的仓库问题是一维的,答案就是中位数或者两个中位数之间的所有数,而这一个问题可以拆分为两个一维的仓库问题,分别找出x轴和y轴的点数,然后相乘。给出平面上一些点,要在到每个点曼哈顿距离之和最小的地方开展会,问有多少个这样的地方。

2024-09-12 11:15:52 392

原创 Codeforces Round 291 (Div. 2) B. Han Solo and Lazer Gun

其实就是问经过发射点和敌人,共有多少条不同的线。由于经过发射点的不同线斜率都不同,所以用集合统计不同斜率的总数就行了。但是有问题,如果用浮点型记录斜率,那么由于精度限制,会出现意想不到的结果,解决方案就是用两个整型代表分数来记录,并且需要约简到最简分数。从一个点发射激光,激光具有穿透性,问射多少次能消灭所有敌人。

2024-09-12 10:56:51 420

原创 Codeforces Round 287 (Div. 2) B. Amr and Pins

优先考虑直线距离,圆心每次移动2R,以最快的速度移动,最后一段距离则可以自由调整,总能使圆心恰好落在目标上。一个圆,每次选择其边上一个点旋转,最少多少次能够变成另外一个圆。

2024-09-12 10:43:54 390

原创 Codeforces Round 363 (Div. 1) A. Vacations(贪心、记忆化搜索)

首先我们肯定想尽量每天都做事,那么如果前一天没有做过同样的事,那么这一天就一定要做事。而如果遇到两种都能做的天数,我们必须要做事,如果与下一天能做的事冲突了怎么办?有一种情况是由于前一天没有做事,导致下一天两件事都能选,那么我们肯定要做事,但是不用决定具体做哪一件事,因为如果后面接着的是只能做其中一件事的天数,那么可以看情况决定做哪一件事。有若干天,每天有四种情况,只能比赛,只能运动,既能比赛又能运动,两者都不能,并且不能连续两天做同一件事,问最少得休息天数。

2024-09-10 20:21:17 519

原创 牛客周赛 Round 59 D.构造mex

要满足k的条件,那么就直接在数组中插入0, 1, 2, …, k就行了,如果无法完整插入,那么就不行。如果插入的总和已经超过s,那么也不行。如果能插入并且还有剩,那就再插入剩下的,再补充0。特殊情况,如果剩下的恰好等于k,又只剩下一个位置,那么也不行,如果剩至少两个位置,就可以分成两半,1和k-1,如果剩下的就是1,并且k=1,那么还是分不了。还有一种特殊情况,k=0,那么就先放1,最后一个再补剩下的,如果光放1已经超出s了,那么也不行。给定总和s,长度n,和最小未出现整数k,构造一个可行数组。

2024-09-09 16:01:09 464

原创 Codeforces Round 272 (Div. 2) B. Dreamoon and WiFi(组合数学)

容易知道,这个序列是无序的。分别算出要走到的位置和另一段序列不包含“?”走到的位置,相减就是?的地方要走到的位置。”,那么就有2^n种情况。能够走到位置的情况有多少种呢,设其中有a个“+”,设要走到x,那么解方程a=(n + x)/2,用组合数计算种数,再除以2的n次方。给定一段移动序列,规定只能在一维数轴上左右走,再给一段不同的序列,有部分是未知的,求走对的概率。

2024-09-09 15:44:11 500

原创 牛客小白月赛100 E题(二分查找)

(数据范围是10^5,那么nlogn的算法肯定没问题)然后我们发现,增加范围的操作一定要在排雷之前,否则一定会亏(就像炉石里的“伏笔”),这样选择就简单多了,遍历排雷范围从1-n,然后按最快方法排雷。所谓的最快方法就是:从头开始排,如果排完一步后遇到没有雷得地方,那就直接移动到下一个有雷的地方。实现的方法就是upper_bound(),因为它一定会找到下一个有雷的地方。一维空间内有许多地雷,每次操作可以选择排掉一定范围内的地雷,或者选择使得范围加1,求排完雷的最小时间。

2024-09-08 17:24:25 184

原创 Codeforces Round 138 (Div. 2) A. Parallelepiped(数学)

【代码】Codeforces Round 138 (Div. 2) A. Parallelepiped(数学)

2024-09-08 17:04:04 256

原创 Codeforces Round 971 (Div. 4) E. Klee‘s SUPER DUPER LARGE Array!!!(二分查找)

最简单就是暴力遍历,但是10^13的数据范围,要么是数学,要么就是logn的算法。我们观察到数据是有序的,随着i的右移,算出的结果(不带绝对值)越来越小,所以可以用二分查找。由于不一定存在正好得到0的i,所以用ans不断存储最大值。给定一个范围,[k, k + 1, …,k + n - 1],求位置i,使得i前面累加后面累减的结果的绝对值最大。

2024-09-07 21:59:46 284

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除