- 博客(40)
- 收藏
- 关注
原创 Codeforces Round 1043 (Div. 3)
尽可能多地使用该交易方案,直到剩余西瓜数量不足。每次交易累加花费,并减少剩余需要的西瓜数量。遇到字符‘D’时,将字符加到单词末尾,遇到字符‘V’时,将字符加到单词开头。这道题目,交易单位是3的幂次,花费公式包含3的幂次,所以用三进制来解决问题。,交易次数 = 5 + 1 = 6(反而增加,说明无法优化)。的数字较大,我们可以尝试用更高次的交易来减少总交易次数。分解成三进制形式,每一位表示该幂次的西瓜数量。),交易次数 = 2 + 2 = 4。,需要减少 1 次交易(因为。次交易(因为每次交易最多拿。
2025-08-22 10:39:57
473
原创 树状数组!
树状数组是一种简化线段树的数据结构,主要用于区间修改和查询操作。它删除了部分二叉树节点以提高效率。树状数组支持单点修改和区间查询,具有O(logN)的时间复杂度,但扩展性较弱。其主要优点在于实现简单,常数较小。通过lowbit运算,可以快速更新和查询。在解决区间问题时,树状数组提供了一种高效的选择,但在某些复杂场景下可能需要线段树。树状数组的结构:树状数组讲解:前置知识——lowbit(x)运算如何计算一个非负整数n在二进制下的最低位1及其后面的0构成的数?例如44=(101100)
2025-08-21 10:59:21
1077
1
原创 河南萌新联赛2025第(六)场:郑州大学
通过不断调整查找区间(如果满足条件则向右扩大,否则向左缩小),最终找到最大的满足条件的N。由于字典序比较时,数字的位数越多、高位数字越大,其字典序就越大,因此最优解通常是。:由于原数字7被跳过,9进制中的7对应实际数字8,8对应9,以此类推(即≥7的数字+1)。对每个用户,依次检查美团(1)、饿了么(2)、京东(3)的优惠力度是否满足其最低要求(,因为每遇到一个数字7,相当于跳过了一个数字(即7被排除)。:将处理后的9进制数字逐位拼接,得到最终的糖果序号。),如果输入的数字全为9,那么直接输出原数字。
2025-08-21 10:25:49
987
原创 Dijkstra
迪杰斯特拉(Dijkstra)算法是一种用于在加权图中找到。它是由荷兰计算机科学家艾兹格·迪科斯彻(Edsger Dijkstra)在1956年提出的。Dijkstra算法适用于处理带有非负权重的图。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法,。适用的是,对于多源则采用弗洛伊德(Floyd)算法。Dijkstra算法的时间复杂度为O(n^2)。步骤:1.每次选取距离源点最近且未被访问的点。2.标记该点访问过。3.更新所有未访问节点到源点距离。
2025-08-19 11:21:15
950
原创 Codeforces练习(三)
本文包含多个编程题解,主要涉及数组操作、游戏策略和数学推理: Deranged Deletions:通过排序比较找出错位排列元素 Tournament:判断特定条件下比赛结果 Blackboard Game:利用模4运算预测游戏胜负 Pile Shuffling:计算最小操作次数 Square of Rectangles:验证长方形能否拼接成正方形 各题均提供C++代码实现,包含关键算法分析和简洁的判定逻辑,适用于800-1100难度级别的编程竞赛问题求解。
2025-08-16 14:55:09
342
原创 河南萌新联赛2025第(五)场:信息工程大学
本文介绍了河南萌新联赛2025部分题目的解题思路与实现代码。题目难度分为简单和中等两类,涉及中位数计算、进制转换、斐波那契数列应用等算法问题。其中,B题通过排序确定极值求中位数;F题通过反复整除计算k进制后置零;G题利用斐波那契数列特性取模判断;C题采用对顶堆动态维护中位数;E题通过质因数分解计算阶乘后置零。各题均提供了简洁高效的C++实现代码,展现了基础算法在实际问题中的应用。
2025-08-14 14:35:51
974
原创 线性DP经典例题讲解
(Linear-DP)是一种动态规划方法,它在状态转移时具有线性的特征。线性DP通常适用于那些线性的问题,它的状态并没有很复杂,一般状态转移方程也很简单,想题的思路也是非常快的。在线性DP中,状态通常定义为一维数组dp[i],表示目前在第i个阶段(例如数组的第i个元素)的最优解。状态转移方程依赖于前面的若干状态,例如dp[i] = f(dp[i-1], dp[i-2], …),其中f是某个函数,表示如何从前面的一个或多个状态得到当前状态的最优解。其中一维的状态只是一般的情况。
2025-08-13 08:30:00
1068
原创 Codeforces Round 1042 (Div. 3)
本文分析了Codeforces竞赛中的四道算法题目解题思路:A题通过双阶段迭代调整数组元素;B题构造满足条件的正负交替序列;C题利用模运算性质判断集合转换可行性;D题通过统计叶子节点分布最小化树直径。各题均给出详细算法分析和C++实现代码,涵盖数组处理、数学构造、模运算应用和树结构分析等算法技巧,展示了解决竞赛题目的系统化思维方法。
2025-08-11 11:17:26
883
原创 背包九讲!!!
所以有必要将它详细的解释一下:若只考虑第i件物品的策略(放或不放),那么就可以转化为只牵扯前 i-1件物品的问题。如果放第 i 件物品,那么问题就转化为“前i-1件物品放入一个容积为 j-v[i]的背包中”,此时获得的最大价值就是 f[i-1] [j-v[i]]再加上放入第 i 件物品所获得的价值w[i].的多种情况中取最值,当k=0时,f [ i − 1 ] [ j − k ∗ c [ i ] ] + k ∗ w [ i ] 就相当于f [ i − 1 ] [ j ] ,也就是这件物品一件也不取的情况。
2025-08-08 14:58:10
959
原创 Atto Round 1 (Codeforces Round 1041, Div. 1 + Div. 2)
使数组满足完美条件。其他情况都无法满足题目要求。:从哈米德位置到网格右边界的最大距离。:从哈米德位置到网格左边界的最大距离。马尼会选择让哈米德走更远的逃脱路径(直接下结论:只有当数组中所有非。:从右侧墙壁到网格右边界的距离。:从左侧墙壁到网格左边界的距离。是因为逃脱当天也算一天。
2025-08-08 10:31:00
304
原创 河南萌新联赛2025第(四)场:河南大学
本文摘要:河南萌新联赛2025第(四)场ACM竞赛题解,包含6道题目的思路分析与代码实现。A题(完美序列)通过统计数字出现次数和数对和覆盖次数求解;C题(合并石子)采用双指针策略最小化移动次数;G题(封闭运算)验证数组对按位或运算的封闭性;J题(故障机器人的完美牌组)通过字典序比较和最大值处理解决问题;B题(0!!!!!)利用数论分块计算因数乘积末尾零的个数;L题(故障机器人的完美遗物)通过素数筛法和完全平方数特性求解。所有题目均给出详细思路和完整C++实现代码。
2025-08-07 14:02:26
1024
原创 8.4cf练习题
题意是求前缀和最小值,所以我们要从位置靠前的元素开始考虑。根据样例我们知道只要找前三个元素就可以了。当a[1]<a[2]时,易知 min(a1) 与 min(a1,a2) 均为a1 的值。由此可见a2 的值不会影响这两个东西,所以和样例中第二组数据一样,在i=2,j=3 时操作。然后有a3=0 成为后面所有元素的前缀最小值。故答案为 min(a1)+min(a1,a2)+0+0+⋯=2a1。当a1>a2 时,不妨直接在i=1,j。
2025-08-04 13:02:59
715
原创 Codeforces Round 1040 (Div. 2)
本文摘要:Codeforces Round 1040 (Div. 2) 题解包含三个问题。A题通过分析元素值选择最优操作(sum或mex)来最大化总和,代码实现简单。B题根据不同情况判断能否阻止Alice达成目标值,需处理四种可能情形。C题通过筛选最优数对使其差最大化,主要策略是为每个右端点选择最小左端点的数对,并输出其索引。三个问题均给出详细思路分析和对应的C++实现代码,涵盖数组处理、条件判断和贪心算法等编程技巧。
2025-08-01 11:40:35
286
原创 河南萌新联赛2025第(三)场:河南理工大学
本文介绍了河南理工大学ACM竞赛中几道典型题目的解题思路与实现方法:B题通过质因数分解优化减法操作次数;E题利用排序+前缀和+二分查找计算最大晶体矿;G题采用组合数学与快速幂解决分配方案数问题;H题通过滑动窗口寻找最长合规子串;K题使用双向非递减调整最小增量;A题通过二分查找与前缀和求解最大子数组平均值;F题基于奇偶性规则进行前缀和调整。各题均给出了详细思路分析和对应的C++实现代码,涵盖了算法竞赛中的多种常见技巧。
2025-07-31 16:49:17
1132
原创 Codeforces Round 1039 (Div. 2)
本文分析了四个编程竞赛题目:A题采用贪心策略,通过排序和逆序遍历统计符合条件的元素;B题使用双指针交替移除数组两端元素来构造特定序列;C题通过维护前缀最小值判断数组元素是否满足条件;D题计算所有子数组数量后,减去相邻递增元素导致的无效子数组。各题均提供了对应的C++实现代码,展示了排序、双指针、前缀处理等算法技巧。
2025-07-29 13:34:54
900
原创 Codeforces Round 181 (Rated for Div. 2)
本文分析了三个算法竞赛题目: A题要求生成无难度的字符串排列,通过sort和reverse函数确保字符降序排列,避免特定模式出现。代码实现简单高效。 B题计算机器人移动的最小成本,利用gcd简化坐标,通过比较简化后坐标与k值的关系确定操作次数,时间复杂度为O(1)。 C题使用容斥原理统计区间内不被2、3、5、7整除的数,通过系统性地加减不同组合的倍数数量来精确计算,代码采用层次化处理确保正确性。 三个题目分别展示了字符串处理、数学推导和组合数学的应用,解法均具有较高的效率和实用性。
2025-07-26 17:05:27
959
原创 Codeforces Round 1037 (Div. 3)
本文介绍了五个编程问题的解法概要: A题:找出整数x的最小数字位,通过取模和除法遍历各位数字。 B题:统计数组中连续k个0的出现次数,使用计数器遍历数组。 D题:处理区间更新问题,对区间排序后检查并更新k值。 C题:与D题思路相同,处理区间更新问题。 E题:基于GCD的性质判断数组是否满足四个特定条件,包括前缀、后缀GCD的单调性和整体GCD的一致性。 每个问题都提供了完整的C++实现代码和解题思路。
2025-07-26 16:58:58
772
原创 整除分块思想&&二进制
题目描述:小蓝有 t 组询问,每次给定两个数字 l, r 你需要计算出区间 [l,r] 中所有整数在二进制下1的个数之和。由于结果特别大,你只需要计算出结果模998244353之后的值即可。输入描述:第一行输入一个正整数 t 表示询问组数。接下来每行两个整数 l,r。(1≤ t ≤10输出描述:每行输出一个整数表示答案。示例一:11 57。
2025-07-24 14:32:04
992
原创 河南萌新联赛2025第(一)场:河南工业大学(补题)
Hz 每天都在写cf,这一天他终于感到了无聊,于是他从队友那里得到了一个仅有 ‘0’,‘1’ 两种字符所构成的二进制字符串,并且开始数字符串中 “01” 子串。和 “10” 子串 的个数。
2025-07-17 15:52:27
684
原创 map暨例题
查看元素是否存在,因为map中键是唯一的,所以存在返回1,不存在返回0。返回指向map第一个元素前面(上一个)的逆向迭代器(地址)返回指向map尾部的迭代器(最后一个元素的下一个地址)如果map为空,返回true,否则返回false。返回一个迭代器,指向键>= key的第一个元素。返回一个迭代器,指向键> key的第一个元素。返回指向map最后一个元素的迭代器(地址)返回指向map第一个元素的迭代器(地址)删除左闭右开区间迭代器对应的键和值。返回键为key的映射的迭代器。插入元素,插入时要构造键值对。
2025-07-11 16:54:55
785
原创 queue
滑动窗口的最值问题可以通过维护一个单调队列来高效解决。通过维护这种单调性,队首元素始终是当前窗口的最值候选,且每个元素最多入队和出队一次,时间复杂度为O(n)。• 求最小值:队列中的下标对应值单调递增(队首是最小候选)。• 求最大值:队列中的下标对应值单调递减(队首是最大候选)。越大),可以用一个单调队列维护当前窗口内的下标。这样,队列头部始终是当前窗口内最小的。通过前缀和,连续子数组。表示队尾元素的下标,初始值为。单调队列的核心思想。表示队首元素的下标,
2025-07-07 17:33:44
465
原创 补题:K - Magic Tree (Gym - 105231K)
可以发现其数量满足一定的规律,经过归纳推理可得,对于列数为m的网格,标记树的数量为2^{m - 1}。本题给定一个2行m列的网格,从(1, 1)格子开始进行深度优先搜索,每个格子可到达至少一个边相邻的格子且不重复访问,要求计算所有可能的标记树(用边集E表示 )的数量,并对998244353取模输出。时间复杂度:快速幂函数 kksuu 的时间复杂度为O(\log n) ,其中n为指数,这里指数最大为10^6 ,相比于直接计算幂次方的O(n)时间复杂度有大幅优化,在本题数据规模下可以高效计算。
2025-05-01 22:15:00
556
原创 补题(16届蓝桥杯 水质检测)
连通具有传递性,即如果 A 和 B 连通,B 和 C 连通,那么 A 和 C 也连通。那么我们可以将两步合在一起做:记录下上一次非空列的状态,比如 0 表示 ##,1 表示 #.,2 表示 .#。从左往右扫描,统计两列间空了多少列,直接计入答案需要补充。那么如果需要补充,肯定是补充在本列,使本列变成有 2 个的情况,显然比补充在前一列更优。不难发现,除了开头和结尾的空列,中间空了几列就要补充几个检测器,至此解决问题。对于两个非空列,只有当他们错开了,本列需要补充一个,变成 ##。表示已经存在的检测器,
2025-04-24 09:00:00
442
原创 c++之STL
介绍:为可变长数组(动态数组),定义的数组可以随时添加数值和删除元素。注意:头文件1.1初始化c指定为数组名称,含义中会注明算法复杂度。返回的是最后一个元素的后一个位置的地址,不是最后一个元素的地址,所有STL容器均是如。使用排序要: 对所有元素进行排序,如果要对指定区间进行排序,可以对里面的参数进行加减改动。共三种方法:注意:一维数组的下标是从 到 ,访问之外的数会出现越界错误。直接和普通数组一样进行访问即可。类似指针,迭代器就是充当指针的作用。 例题;杨辉三角链接:https://leetcode.
2025-04-15 20:09:20
691
原创 表达式括号匹配(栈)
出一个表达式,该表达式仅由字符(、)、+、-以及数字组成。请编写一个程序检查表达式中的左右圆括号。表达式括号匹配 - 计蒜客。
2025-03-22 12:22:20
439
原创 时间复杂度(大O符号表示法)
(1)时间频度一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。(2)时间复杂度在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。为此,我们引入时间复杂度概念。一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)
2025-03-15 11:00:22
951
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅