自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 P11962 [GESP202503 六级] 树上漫步

题目P11962[GESP202503六级]树上漫步的核心在于:在树上从起点s出发,走偶数步能到达的点,等价于与s同色的点。利用树的二分染色性质,任意两点间路径长度的奇偶性唯一,且走法步数奇偶性不变。因此,从s出发能停在t当且仅当dist(s,t)为偶数,即s与t同色。通过BFS对树进行二分染色,统计每种颜色的点数,即可快速回答每个点的答案。时间复杂度O(n),适用于大规模数据。

2026-11-07 08:00:00 87

原创 CF 2232C1 Seating Arrangement (Easy Version)

本题通过动态规划解决座位安排问题,核心思想是将状态压缩为“已开桌数o”,dp[o]表示开o张桌时最多可坐人数。关键在于:忽略具体人员与顺序,仅关注空位数量;贪心不可行,因开桌影响后续可用空位。状态转移分三种情况:跳过、开新桌(需未达上限)、加入(需有空位)。代码实现中使用nd数组避免覆盖,最后取dp数组最大值作为答案。复杂度O(n·min(x,n)),适用于n总和≤3000的规模。

2026-11-06 16:00:00 339

原创 P7012 [CERC2013] Draughts

本题需对每个白子进行DFS搜索,枚举所有吃子顺序以求最大吃子数。因吃子会改变棋盘状态(中间黑子消失、起点空出、落点变白),后续可走路径依赖已吃棋子,故不能用BFS(无法保证状态唯一)。关键细节:1)必须遍历所有白子起点;2)直接读棋盘判断空/黑/白,避免冗余状态数组;3)一次吃子改三格,回溯时三处恢复,顺序对称,缺一不可;4)恢复时应还原原值,而非假设值。代码中三个典型错误:恢复错位、漏恢复、误判可吃对象,均源于状态管理混乱。最终通过清晰的状态维护与对称操作,正确求解最长吃子链。

2026-11-06 08:00:00 188

原创 B4292 [蓝桥杯青少年组省赛 2022] 路线

【代码】B4292 [蓝桥杯青少年组省赛 2022] 路线。

2026-11-05 16:00:00 396

原创 B3862 图的遍历(简单版)

本文对比了图的遍历问题的两种解法:普通BFS(枚举每个点进行BFS,复杂度O(N(N+M)))与反图BFS(从大到小处理节点,利用反图BFS一次性确定每个点能到达的最大编号,复杂度O(N+M))。后者通过逆向建图和贪心赋值,确保每个点仅被访问一次,显著优化效率。核心思想是:若某点v未被赋值,则其答案为自身(因无法到达更大的已处理点),并通过反图传播至所有可到达v的点,最终得到最优解。

2026-11-05 08:00:00 628

原创 P1700 [USACO19OPEN] Milk Factory B

本题关键在于:N个点、N-1条边且连通的图必为树,无环。定向无法形成有向环,故答案点出度必为0(汇点)。只需在反图中对每个汇点进行BFS,判断是否能到达所有点。若某汇点可达全部节点,则为唯一解;否则无解。代码通过反图转换“入可达”为“出可达”,仅需一次遍历即可判定,时间复杂度优化至O(N)。

2026-11-04 08:00:00 749

原创 P17294 [ICPC 2026 Xi‘an I] North and South

本题核心思路是将“使数组元素相等”转化为“使前缀和偏差为零”。设目标值 $ v = \text{sum}/n $,若不可整除则无解。令 $ c[i] = a[i] - v $,问题变为通过偶数长度区间交替加减操作使 $ c $ 全为 0。引入前缀和 $ P[k] = \sum_{i=1}^k c[i] $,关键引理表明:每次操作仅对同奇偶下标的 $ P $ 增加 1。因此,$ P[k] $ 只能增加,若初始 $ P[k] > 0 $ 则无解;且 $ P[n] $ 恒为 0,无需考虑。将需求 $ t[k

2026-11-04 06:00:00 416

原创 CF1847C Vampiric Powers, anyone?

本题核心思路是将“任意子段异或”转化为“两个前缀异或的异或”。定义前缀异或 $ P[0]=0, P[k]=a_1\oplus\cdots\oplus a_k $,则区间 $[i,m]$ 的异或为 $ P[m] \oplus P[i-1] $。操作中每步追加值为 $ q \oplus c $($ c $ 为当前末尾前缀),新末尾前缀变为 $ q $,即状态仅在集合 $ V = {P[0],\dots,P[n]} $ 内转移。最终所有可达值均为 $ V $ 中两数异或,答案即为 $ \max{p \oplus

2026-11-03 08:00:00 876

原创 P1460 [USACO2.1] 健康的荷斯坦奶牛 Healthy Holsteins

本文详解洛谷P1460《健康的荷斯坦奶牛》三种解法:位掩码枚举、DFS回溯与迭代加深。位掩码通过二进制状态表示饲料选择,枚举所有组合(最多32768种),逐项验证维生素需求;DFS采用递归回溯,按编号顺序搜索,剪枝优化避免无效分支;迭代加深则从1种开始逐层试探,首次成功即为最优解,保证字典序最小。三者均高效处理G≤15的约束,核心思想为状态压缩与剪枝优化。

2026-11-02 08:00:00 782

原创 P1481 魔族密码

本题为洛谷P1481“魔族密码”,是一道典型的动态规划题。核心思想是:按字典序排序后,对每个单词判断其是否能接在前面单词之后(即长度更长且为前缀)。利用compare(0, len, str)函数判断前缀关系,状态dp[i]表示以第i个单词结尾的最长词链长度,转移方程为dp[i] = max(dp[i], dp[j] + 1)。最终输出最大值。时间复杂度O(n²),需注意排序与前缀判断。

2026-11-01 08:00:00 274

原创 CF2112C Coloring Game

该题核心是统计满足条件的三元组数量:三个数之和大于数组最大值,且前两数之和大于第三数。优化思路为固定最大数 $a_k$,转化为在前 $k$ 个元素中统计两数之和大于 $\max(a_k, mx - a_k)$ 的配对数。利用双指针技巧,数组有序时可线性处理每组 $k$,时间复杂度从 $O(n^3)$ 降至 $O(n^2)$,避免超时。

2026-10-31 08:00:00 302

原创 P16237 [蓝桥杯 2026 省 B] 应急布线

本题通过并查集求解连通块数量,目标为用最少跳线使所有计算机连通。设连通块数为 $ C $,则最少需 $ C-1 $ 条跳线。第二问将 $ 2(C-1) $ 个线头均摊至 $ N $ 台机器上,最小化单机最大负载,答案为 $ \lceil \frac{2(C-1)}{N} \rceil $,可通过构造证明可达。代码实现简洁高效。

2026-10-30 08:00:00 378

原创 P1233 [ICPC 2001 Taejon R] 木棍加工

本题通过将木棍按长度降序排序,转化为求宽度序列的最少不上升子序列划分。利用动态规划求最长上升子序列长度 $ L $,并按 $ dp[i] $ 值分堆,证明同一堆内元素不增,且堆数恰为 $ L $。因此答案即为最长严格上升子序列的长度。

2026-10-29 08:00:00 315

原创 P1308 [NOIP 2011 普及组] 统计单词数

题目要求统计字符串s1在s2中出现的次数及首次出现位置。由于输入含空格,需用getline读取。注意cin与getline混用时需用cin.ignore()清除换行符残留。将两字符串转为小写后,遍历s2按空格分割单词,匹配s1并记录次数与首位置。若未找到,输出-1;否则输出次数和起始位置。

2026-10-28 08:00:00 63

原创 P1271 【深基9.例1】选举学生会

本题考察数据规模对算法选择的影响。虽可排序(O(m log m))通过,但最优解为计数排序(桶思想),时间复杂度O(m + n),仅需约2×10⁶次操作,效率提升显著。利用数组下标统计频次,避免排序开销,体现“根据数据量选算法”的核心思想。

2026-10-27 08:00:00 216

原创 CF2241D An Alternative Way

该题核心思想是将数组差值 $ c = b - a $ 的前缀和 $ d $ 作为关键变量。操作 $[l, r]$ 相当于在 $ c $ 上对位置 $ l $ 加 1、$ r+1 $ 减 1(边界处理),其效果等价于使前缀和 $ d_l $ 增加 1,$ d_{r+1} $ 减少 1。由于每次操作只会让某些前缀和增加或不变,不会使其减小,因此若存在 $ d_k < 0 $,则无解。反之,只要所有 $ d_k \geq 0 $,即可通过独立操作 $[k, k+1]$(或 $[n,n]$)来逐个“拧高”前缀

2026-10-26 08:00:00 333

原创 P1303 A*B Problem

该题为高精度乘法模板,通过模拟竖式乘法实现大数相乘。设两数位数分别为n、m,其乘积位数不超过n+m(因$10^{n+m-2} \leq A\times B < 10^{n+m}$)。程序将两个字符串逆序处理,对应位相乘累加至结果数组,最后统一进位,并去除前导零输出。核心思想是逐位计算与进位优化,时间复杂度$O(nm)$。

2026-10-25 08:00:00 544

原创 P1258 小车问题

本题为洛谷P1258小车问题,核心思想是两人同时到达终点时总时间最短。数学解法利用对称性与相对运动推导出最优下车点公式:$ w = \frac{2as}{3a + b} $,进而计算总时间。二分解法则通过猜测时间 $ T_0 $,判断是否存在下车点使两人均能在 $ T_0 $ 内完成,利用函数单调性与三分优化寻找最小时间。两种方法均基于“最优策略下两人同时到达”的关键假设,最终输出最短时间,精度达 $ 10^{-6} $。

2026-10-24 08:00:00 579

原创 P1201 [USACO1.1] 贪婪的送礼者 Greedy Gift Givers

利用map的键值对来存储每个人的信息,用结构体P来细分个人内部输出输入情况。

2026-10-23 08:00:00 432

原创 P1192 台阶问题

题目P1192台阶问题是一道经典的递归与动态规划结合题。通过记忆化搜索或递推DP求解,状态转移为:到达第n阶的方案数等于前k步内各阶方案数之和。关键在于初始化dp[0] = 1(起点),其余按dp[i] = sum(dp[i-j])递推,取模100003防止溢出。代码简洁,逻辑清晰,是理解动态规划基础的好例题。

2026-10-22 08:00:00 173

原创 P1138 第 k 小整数

本题求第k小的不重复整数,提供多种解法:桶排序法利用布尔数组标记出现情况,遍历找第k个;排序去重法先排序再去重,直接取第k个元素;set自动去重并有序,通过迭代器定位;堆(大根堆)法适用于大数据流场景,维护大小为k的堆,最终堆顶即为答案。时间复杂度与数据规模适配,各有优势。

2026-10-21 08:00:00 506

原创 CF1870B Friendly Arrays

本题核心在于通过位运算性质分析异或结果的极值。关键洞察:对每一位独立考虑,若 $ n $ 为奇数,则全选 $ b $ 的按位或($ V = O $)可使异或结果最大化,最小化则不操作;若 $ n $ 为偶数,反之。因此,答案在原始异或值与全或后异或值之间取极值,分别对应 $ \text{min} = \text{base}, \text{max} = \text{after} $($ n $ 偶)或相反。巧妙利用位独立性与奇偶性判断,无需逐位操作,仅需全局计算。

2026-10-20 08:00:00 571

原创 CF2271B MEX Game

题目要求判断先手是否必胜。核心思路是:若双方采取最优策略,胜负取决于是否存在某个数字出现次数为 $2k-1$,此时先手可借此打破平衡获胜。若所有数字出现次数均 $\geq 2k$ 或 $\leq 2k-2$,则双方可对称操作,无法打破平局;但只要存在一个数出现 $2k-1$ 次,先手必胜。因此只需遍历每个数的频次,一旦发现 $arr[i] == 2k-1$,输出 "YES",否则 "NO"。

2026-10-19 08:00:00 291

原创 P1011 [NOIP 1998 提高组] 车站

题目P1011[NOIP1998提高组]车站:通过枚举法模拟每站上下车人数,使用up、down、sum数组分别记录上车、下车及累计人数。初始化第1站状态,循环推导至第n-1站,若总人数等于目标值m,则输出第x站的累计人数。关键在于多数组同步维护状态,枚举范围不超过m(人数递增),巧妙利用动态转移思想,避免复杂计算。

2026-10-18 08:00:00 400

原创 P1008 [NOIP 1998 普及组] 三连击

题目要求找出三个数,使其构成1~9的全排列。由于数据量小,直接枚举123到329之间的数i,判断i、2i、3i是否恰好包含1~9各一次。通过数组c统计每位数字出现次数,若每个数字仅出现一次则输出结果。注意从1开始检查,因0不参与。代码简洁高效,符合暴力枚举思路。

2026-10-17 08:00:00 500

原创 P1003 [NOIP 2011 提高组] 铺地毯

a b x y这四个数组存放每一张毯子的信息。之后再倒着往回找,找到的第一个就是结果。还要注意下标的偏移 进行修正+1即可。这就代表这个点落在了这张毯子上;如果没找到就是-1;

2026-10-16 08:00:00 477

原创 P1100 高低位交换

题目P1100“高低位交换”通过位运算实现32位整数高低16位的互换。使用unsigned int避免符号位影响,左移16位将高16位移至低位,右移16位将低16位移至高位,两者相加即得结果。关键在于unsigned右移补0(逻辑右移),确保高位空位补0,实现正确对调。代码简洁高效,体现位运算精髓。

2026-10-15 08:00:00 298

原创 P1002 [NOIP 2002 普及组] 过河卒

有些虽然能到达,但是不能继续往下走了:如(4,5)

2026-10-14 08:00:00 234

原创 P1115 最大子段和

ans初始化为了 -9223372036854775808,也就是long long类型的人最小数字,其中设置一个m来存历史(之前的)的最小前缀和:这样就实现了 sum[0,r-1]尽量小的目的。因为数组里的数可以是小于0的,如果初始化为0就照顾不到负数了。在遍历的过程的也实现sum[0,l]尽量大。也可以用LLONG_MIN代替。sum[0,r-1]尽量小;再与历史值和当前最大段和比较。l r为该区间左右下标。想要sum[l,r]最大。sum[0,l]尽量大。

2026-10-13 08:00:00 516

原创 CF2259B Minus Two

该题核心在于无限操作下数字最终归为0、1、2三类。奇数必剩1;偶数分两类:模4余0的可归0,余2的恒为2。通过统计每类数量,取最大值即为答案。代码虽略冗余,但逻辑清晰,正确处理了“摇摆”现象,是高效解法。

2026-10-12 08:00:00 358

原创 P8649 [蓝桥杯 2017 省 B] k 倍区间

给定序列与K,求所有和为K倍数的连续子段数量。利用前缀和与同余原理:若两前缀和模K余数相同,则其间段和为K的倍数。遍历过程中用数组统计各余数出现次数,每遇一个前缀和,将其余数对应的计数加入答案,并更新计数。时间复杂度O(n),空间O(k)。

2026-10-11 08:00:00 508

原创 CF2205A Simons and Making It Beautiful

本题核心在于通过一次交换消除“丑陋”索引。最佳解法是找到最大值并将其与首元素交换,确保仅有一个“丑陋”位置(即最大值原位置)。原示例误导了思路,导致复杂化处理。正确策略无需遍历判断,直接定位最大值并交换即可,时间复杂度更低,逻辑更清晰。

2026-10-10 08:00:00 515

原创 CF743A Vladik and flights

题目要求判断从机场a到b的最小飞行费用。若两机场相同(s[a-1] == s[b-1]),直接飞,费用为0;否则,由于0与1型机场必有相邻,可先免费飞至相邻机场,再以1单位费用抵达目标,总费用为1。该解法简洁且最优。

2026-10-09 08:00:00 345

原创 CF2260B Monocarp and Projects

该题要求计算 $\sum_{i=0}^{k-1} (y+i) \bmod (x+i)$。核心思路是分两段处理:当 $y+i \geq 2(x+i)$ 时,余数变化需逐项计算;当 $y+i < 2(x+i)$ 时,商恒为1,余数恒为 $y-x$,可直接乘上剩余次数。通过循环枚举前段,后段用公式加速,避免递归导致的 TLE,时间复杂度从 $O(k)$ 优化至 $O(\min(k, y-2x))$,高效解决 $k \leq 10^{12}$ 的情况。

2026-10-08 08:00:00 207

原创 头文件可以防什么错?运用头文件做声明

为防止外部变量类型不一致导致的编译与运行错误,应遵循“每个外部对象仅在一个头文件中声明”的规则。通过统一头文件声明,所有模块包含该头文件,确保类型一致;定义者也包含头文件,保证定义与声明匹配。若类型不一致,编译器会在同一编译单元中报错(如C2040);若无头文件,类型漂移将导致链接通过、运行时读取错误数据(如“xyz”被误读为整数8026488)。此规则有效堵住类型漏洞,保障程序正确性。

2026-10-07 08:00:00 1009

原创 P1028 [NOIP 2001 普及组] 数的计算

本文分析了洛谷P1028“数的计算”问题的两种解法。第一种为递归+双指针+记忆化,通过构造合法数列并递归统计,但存在效率瓶颈;第二种为动态规划优化解法,利用前缀和思想,自底向上计算f[i] = 1 + s[i/2],其中s[i]为前缀和,显著提升效率。最终答案为f[n],时间复杂度降至O(n),是更优解法。

2026-10-06 08:00:00 274

原创 两个源文件里都写 int a是重定义?不一定 变量的定义与声明

三个语句区别在于:inta;是定义,分配存储空间(默认初值0);inta=7;是定义,分配空间并初始化为7;externinta;是声明,仅说明变量存在,不分配空间。关键分界线是“是否分配存储”。extern可出现在函数内,仍为声明。外部变量必须且只能定义一次,多处定义时:无初值的为“暂时定义”,有初值的为“硬定义”;两硬定义冲突报错,一硬一软以硬为准,全无初值则合并为0。MSVC支持此规则。

2026-10-05 08:00:00 588

原创 总是犹豫r - l要不要+1?边界计算与不对称边界

数组下标范围因语言而异,C中为0到n-1,易引发“栏杆错误”(off-by-one)。书中强调用“入界点”与“出界点”表示范围(如i < 10而非i <= 9),可避免边界错误:范围大小=上界-下界,空范围时上界=下界,且上界永不小于下界。该技巧在缓冲区管理中尤为有效——指针指向首个未占用位置,使bufptr - buffer即为已用字节数,无需+1。通过此法,代码更简洁、不易出错,且能精准处理末页不满情况,提升程序健壮性与美学。

2026-10-04 08:00:00 3686

原创 空指针和空字符串有什么区别?为什么 p == 0 合法,strcmp(p, 0) 却会崩

空指针(值为0的指针)可参与比较,但不可解引用。strcmp(p, (char*)0)非法,因函数需访问指针指向内存;而if(p == 0)合法,仅比较指针值。空指针不指向任何内存,空字符串则指向有效内存且首字符为\0。两者本质不同:nul == empty为假,nul == '\0'为真是数值巧合。C中NULL为(void*)0,C++中为0,导致重载歧义,故引入nullptr。未定义行为未必崩溃,如VS2022的printf("%s", NULL)输出(null),体现编译器实现差异

2026-10-03 08:00:00 2989

原创 -7 / 2 在 C 里是 -3,在 Python 里是 -4,谁算错了?

C语言在整数除法中仅保证余数与被除数同号(性质2),放弃余数恒为正(性质3),而Python则选择余数与除数同号。两者均满足性质1(q×b+r=a),但实现方式不同,皆合法。C99标准明确向零截断,但未强制余数非负,故哈希表下标需手动处理负余数。

2026-10-02 08:00:00 5014

空空如也

空空如也

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

TA关注的人

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