自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2020 年CCPC Henan大学生程序设计竞赛题目解析

离散化+差分,套用离散化模版,直接映射到新的数组上,然后因为差分过程需要对右端点向右偏移一格,所以我们需要在右端点进行+1操作,注意数据范围,因为每个学生对应两个端点,所以需要对离散数组的大小*2。纯模拟,用vector存一个每个干部所有的竞选人以及票数,然后写一个自定义排序,将票数从大到小排,票数相同则按学号从小到大排,最后遍历输出队首即可。对于mle,我们发现这轮的数据只和上一轮有关,所以我们直接备份数据,将二维压缩到一维。纯数论,有快速幂,组合数学,概率论,费马小定理。C. 我得重新集结部队。

2026-04-24 18:28:53 274

原创 ECD 183(d2)ABCD题解

将题目转换为对于所有的子段,使其没有逆序对的子段数量 = 所有子段数量 - 有逆序对的子段数量,我们可以将答案数组分成许多个彼此不相互影响的子段来看,我们可以很轻易地知道,对于一个严格递增的子段而言,其对应的权重为n*(n+1)>>1,于是我们可以很轻易地成功利用dfs构造出答案数组。解题思路:首先0或者1必然知道结果,接下来考虑2的情况,当剩下未知的位置的个数小于等于2的数量的时候,必然被取完,全部为‘-’,否则每当出现一个‘2’,则左右两边各会出现一个‘?算法:前缀和,哈希表,字符串。

2025-12-21 19:34:43 382

原创 Codeforce Round 1076(d2) ABCD题解

解题思路:对于a的一个数字,如果我们对其执行一次操作1和操作2,那么对于答案而言是不变的,而对于A而言,他必然会每回合执行对数组a的答案影响最大的下标b,B同理,所以我们可以先预处理出所有a的某个位置的最大子数组和,然后看回合数是奇数还是偶数,如果是奇数,则答案为。解题思路:题目要求我们将整个序列平均分成两个大小相同的子序列,其中我们可以很轻易的看出,对于一个出现次数为奇数的数,他对答案的贡献必然为1,而对于一个出现次数为偶数次的数字来说,他的贡献可以为2或者0,解题思路:简单构造,时间复杂度:O(1)

2025-12-06 17:48:20 1024

原创 Codeforces Round 1054(d3)ABCDEF题解

给你两个数字h和d,表示一个人的初始生命值和终点位置,从起点0出发,每次经过一个节点可以选择休息或者前进,休息加一点生命值,前进消耗第i次连续前进值的生命值,每次操作增加一个回合数量,问最少需要多少回合才能到达终点。给你一个长度为n的数组a和一个数字k,其0<=k<=n,你每次可以选择数组中的一个数,使其变为[0,n]的任何一个数,问最少修改多少次能使得整个数组的MEX变为k。:给你一个大小为n的数组a,数组仅由-1,0,1组成,每次可以选择一个数字加1,求出最小操作次数使得整个数组的所有元素乘积为正。

2025-11-28 16:58:10 628

原创 Codeforce:B. Catching the Krug

给你一个n还有K和D的坐标,然后在一个大小为(0,n)*(0,n)的网格图中进行D对K的追捕,其中D可以进行8连通移动,K可以进行4连通移动,问在追到的回合之前经历了多少回合,如果永远追不上输出-1。1.如果两者在一条直线上,那么必然对于D而言可以永远保证相同的那个坐标一直相同,所以答案就是D->K所对应的墙壁距离。2.如果两者不在一条直线上,那么答案必然就是D走到D->K所对应的那个角落的距离(画图易知): 显然,移动效率高的一方必然可以追到移动效率低的一方,所以-1的情况不可能出现。

2025-11-25 13:50:46 258

原创 Codeforce:C. Loyalty题解

2.a[i]<x,我们可以将所有的这部分数放到一个数组当中,然后sort一下,如果目前的res可以被允许添加,那么我们就将较大数字添加到我们的res当中,否则,我们将较小的数字添加到sum,让其成为垫脚石,这样可以使得我们同样机会的情况下,所有的机会都被让给了较大的那部分数。:看到数据量肯定是想要问我们找到一种最优的选择策略来解决这道题,我们希望最终的结果尽可能大,但是所有数字的和是固定的,那么就要考虑如何在被允许加权的时候对应的数字最大。,因此可以优先将这些数字添加到答案当中。

2025-11-25 11:48:39 312

原创 Codeforce:周末训练赛DEF题解

观察数据范围n为0-2000,很容易想到需要使用一个O(n^2)的算法来实现,题目要求求出最优区间,而枚举所有区间恰好为O(n^2),那么如何在枚举所有区间之后可以求出答案呢,这里需要在每次枚举的过程中快速求出这个区间对应的逆序对变化量,这里观察到每次影响这个区间的逆序对数量的只与左端点有关,区间中每有一个大于左端点的数,那么在左端点移动到右端点的时候,就会形成一个逆序对,反之则会减少一个逆序对,这样就可以快速求出固定每个左端点之后每个对应区间的逆序对变化量了。

2025-11-24 20:36:40 725

原创 Codeforce :C. Creating Keys for StORages Has Become My Main Skill题解

则说明当前数字不会改变最终答案(不会使0的位置变成1),将当前数字添加当res当中,否则跳出循环,说明当前数组的MEX最大只能是i,如果循环提前终止,则剩下的数都填入k即可,否则对于最后一个位置的数,如果temp|n-1==k,则填入n-1(保证最终结果),否则填入k。:从0开始依次顺次递增添加每个数字,枚举范围为(0-n-2)用一个临时数temp来存当前所有数的|值,如果(temp|当前数之后&k)==(temp|当前数)

2025-11-24 16:50:59 338

原创 带你快速理解重要算法---离散化,并了解使用时机

离散化是一种数据处理技巧,当数据的取值范围很大,但实际用到的数据个体量相对较小时,我们可以通过,从而降低数据处理的复杂度。换一种说法,离散化是一种将连续数据映射到有限离散值的过程,常用于处理数据范围过大或精度要求不高的场景。通过离散化,可以将无限或连续的数值转换为有限的类别或区间,便于储存,计算和分析。

2025-05-28 21:11:40 969

原创 unordered_map与map区别与底层实现

unordered_map 和 map 都是C++ 中用于存储键值对的数据结构,它们有以下区别及底层实现方式:

2025-05-27 16:19:01 512

原创 不用10分钟,快速理解哈希(Hash),哈希算法,哈希表

哈希是一种能将任意长度的数据输入转化为固定长度值的过程,这个固定长度的输出值被称为哈希值或者摘要。无论原始数据有多长,哈希值的长度都是固定的。

2025-05-27 15:11:43 1436 1

原创 带你深入浅出c++中的优先队列(Priority Queue),算法竞赛必学考点!入门看我这篇就够啦!

与普通的队列相比,最重要的特点就是不是按照进入顺序进行所谓的“先进先出原则”,而是根据元素的优先级进行排列,而后根据元素的优先级进行弹出和插入操作

2025-05-23 21:32:45 949

原创 2025年第九届河北省CCPC大学生程序设计竞赛 M.第九届河北省大学生程序设计竞赛 题解

现在我们来分析一下时间复杂度,可以利用dfs暴力求出所有组合情况,在dfs部分,我们可以利用剪枝排除无效子集,仅枚举10-13题的组合,以此来大幅度减少搜索空间,并利用exit(0)来终止无效搜索,同时在dfs中我们需要判断所搜结果是否符合题意,故在check函数中我们需利用sort函数来进行排序和判断,时间复杂度有O(mlogm),故总的时间复杂度为。解答:由于本题数据量很小,很容易直接想到“暴力”大法,实际上也的确没错。//代码已添加注释,方便各位理解。

2025-05-21 22:44:55 1150

原创 2025年第九届河北省CCPC大学生程序设计竞赛 K.UNO!题解

题解:观察题目不难发现,这是一道模拟题,思路很快就会有,但关键点是处理这道题的方法,如果用int数组存数据并不断遍历,由于牌数为0的玩家会直接退出,无法成为相应的下家,所以在不移除牌为0的玩家的情况下,时间复杂度最坏会达到O(n*m),赛场上测评机就会爆T了~所以说正确的思路就是利用循环双向链表存数据,每当出现一个牌数为0的玩家就把他移除链表,如此O(m)的时间复杂度便可以轻松飘过这道题了。由于本蒟蒻实力有限,无法补完所有题的题解,故只能选做且一个一个发题解,望谅解。

2025-05-21 17:16:03 2730

原创 2025年第九届河北省CCPC大学生程序设计竞赛 H.What isallyouneed?题解

由于本蒟蒻实力有限,无法补完所有的题,故只能选做且一个一个发题解,望谅解。题解: 很简单,利用。

2025-05-20 14:44:03 428

原创 2025年第九届河北省CCPC大学生程序设计竞赛J. Generate 01 String题解

于是乎对于子串,就有以下两种情况,01(10)连续,与01(10)不连续(出现00,11),于是可以想到利用栈容器(stack)进行捕捉和模拟是否出现连续,当遇到与栈顶相同的数时,将其入栈,相当于对新的标识符进行操作,当遇到不同的符号时,将其出栈,模拟标识符消失的过程,并更新下次操作S的位置,这样就能通过栈来模拟整个操作过程,确定每次针对的标识符位置和类型。那么不妨把处理整个大的01串的问题转化为大01串中连续且0,1个数相等的小01串问题,即“划分子问题”。

2025-05-20 14:12:13 1167 1

空空如也

空空如也

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

TA关注的人

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