枫林叶233
枫林叶233
全部文章
分类
题解(18)
归档
标签
去牛客网
登录
/
注册
枫林叶233的博客
全部文章
(共18篇)
题解 | #E#
题目 输入 输出 思路 对于水淹没城市,然后生成联通块。可以逆向思考为,水褪去,城市的联通块合并为一起,转为并查集的思路。 提前通过公路,建立城市之间的连接。 对于不同高度的城市,可以放入数组,从大到小排序。 建立每个城市父亲节点指向自身,同时记录城市的大小。 时间倒流,对城市数组遍历,如果高...
C++
2026-02-20
0
9
题解 | #D#
题目 输入 输出 思路 对于每个色块,它都有位置和染色时间两个信息。所以可以用pair来储存黑色块信息,然后放入优先队列,以时间为key从小到大排序。 然后对最小的黑色块,向四个方向蔓延,同时更新染色时间。 特殊的蓝色块,则要比较它染色的时间,和题目给出的变色时间的大小,比题目时间大时才能放入...
C++
2026-02-20
1
14
题解 | #B
题目 输入 输出 思路 因为有t个连线露在外面,那么就意味着有t+1组球。 因为对于线来说,左兰州和右篮子是相同的,所以我们可以想象有无限个篮子,那么要有t个线,就应该t+1个篮子有球(球的个数不一定)。 如果t+1是奇数,那么就意味着一篮子有(t+1)/2+1个组,另一个篮子有(t+1)/2...
C++
2026-02-19
0
16
题解 | #A
题目 输入 输出 思路 要使斜边和最小,就等价于每一次的额度使用后,创造出来的斜边最小,也就是斜边的变化率最大。 可以先算出所有的斜边的总和,已经斜边的变化率,然后将变化率放入优先队列里从大到小排列。 找出最大的变化率,并在ans上减去,同时更新此时三角形的变化率,放入优先队列。 最后保留六位...
C++
2026-02-19
0
16
题解 | #E#
题目 输入 输出 思路 题目要求最大的子段和,可以先将数组求前缀和,转换为求最大的sum[r]-sum[l-1]。 同时由于要对p进行取模,所以前缀和的数据并非递增的,sum[r]-sum[l-1]就可能为负数,进而结果就要加p,保证取模结果是正数。 对r进行遍历,要使子段和最大l有两者情况。...
C++
2026-02-17
0
13
题解 | F
题目 输入 输出 思路 设dp[i]为前i项最大的快乐值,根据题目可以发现dp[i]=max(dp[i],dp[i-1],dp[i-2]+b,dp[i-7]+a,dp[i-8]+a+b); 观察数据大小发现,n特别大时,直接暴力会超时。可以找2,7,8的最小公倍数,将n以56为一组进行贪心。 ...
C++
2026-02-16
0
12
题解 | #D
题目 输入 输出 思路 题目要求合成一堆的代价最小,即要让小的先合在一起,所以考虑用优先队列从小到大排序。 考虑到数据大小,要将同一重量的果子一起处理,可以用pair存储c,w. 对于偶数个相同重量的果子,可以将它们合并,数量减半,然后放入队列里; 对于奇数个,则要保留一个果子,和下一个pai...
C++
2026-02-15
0
11
题解 | F
题目 输入 输出 思路 要使这个 01 字符串所有非空连续子串的mex之和最大,那么这个字符串的01就应该均匀分布。 当1和0的数量相等时,答案就是101010....; 当0的数量大于1时,要均匀分布,可以想象成a长度的0字符串被分成b+1份。多余的0,就均匀的分布在b+1份的串中。 1大于...
C++
2026-02-12
0
18
题解 | #c
题目 输入 输出 思路 要使相邻两项的异或值相加最小,就要相邻的数二进制尽可能相近,同时也要满足排列的性质。 0000 0001 0010 0011 在满足排列性质的前提下,发现只有两个数二进制异或完只剩下一个1的排序最小。 也就是答案构成格雷码。 格雷码第i项就是i^(i>>1)...
C++
2026-02-11
0
13
题解 | C
题目 输入 输出 思路 使得s中任意两个相邻元素都不相同,存在两种可能10101....或01010.... 对于输入的串,只有相同位置不同的需要放入子序列中。 对于子序列如1010111。 只有相邻的数不相同就可以归入一次01反置。 所以只有记录以1结尾的串和以0结尾的串就能求出答案; 完整...
C++
2026-02-11
0
15
首页
上一页
1
2
下一页
末页