自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Education Codeforces Round 175(C~D)

比较好的一个二分的模板,思路比较通用,也就是这种所有最大值的最小值,我们就可以二分答案!然后每次判断这个答案是否符合条件即可。树形dp模板,每次从上一层来,除了第二层减掉父节点。

2025-03-01 14:13:54 235

原创 2024-2025学年杭师大第三次月考7-13题目讲解

如果不相等的话,就优先填满短边,中间会有空出来的,奇数就是中间一行,偶数就是隔一个放两个。同时统计C的个数cnt,分cnt>=ans和cnt<ans两种情况,由于C肯定可以消除身边的一个元素,两个式子相减就好,cnt大的情况奇偶讨论是0还是1.那么可以这样解决:对于偶数位上的字母,G的贡献+1,B的贡献-1,奇数位相反。因为是删掉大的字母,所以我们可以发现,从大往小的顺序删除元素总是能保证不会产生更劣的影响,因此就是从大到小遍历删除即可。是一个构造题,构造的方式手玩一下也可以发现规律,分为n=m,n!

2024-12-19 20:44:01 278

原创 数字重组

题解:其实赛时已经有点想到了,但是还是内心有点排斥全排列,并且没想好怎么分组,其实因为是全排列,按照一个规律分组就可以了。这里又学到了一个函数next_permutation(),可以轻松实现全排列,代码如下。

2024-12-10 22:44:18 309

原创 ljl要不对称的美

题解:可以看出,对于每个偶数长度的子串,只要我有一个元素与首元素不相等,那么这个子串必然是个非对称子串,而大于这个子串的长度为偶数的子串必然也存在非对称子串。对于奇数长度的子串同理,如果隔一个有不相等的,那么必然是非对称子串。如果是abaca这种的怎么办呢?也完全不用担心,因为题目里是真子串,不包含一整个字符串。然后我们就可以记录每一个元素的最近的不相等元素的位置(没有就返回数列末尾的后一个)。对于每次的询问l,r,只要查询第一位和第二位元素的最近不相等元素的位置,即可以找出子串的个数。

2024-12-10 22:40:49 224

原创 约数和

题解:数论的题还是太欠缺了。直接求和必然是不行的,数据极大。这里可以通过类似前缀和的方式实现。因为对于每一个F(1~n)(求和),手玩一下就会发现每次都可以变为因数乘这个因数的个数,并且因数的个数是递减的,中间有好长一段因数的个数也是相同的,就可以通过等差公式来快速计算。

2024-12-10 22:29:54 212

原创 Codeforces round 990 D

题解:这题其实模拟过程很容易想到,就是每次找到后面的最小元素,然后把这之前的元素都放到后面去,这里因为可以选择顺序。我们就可以以最优情况将放到后面的元素从小到大排,最后还要有一次判断就是还未处理元素的最小元素如果大于第一个向后排的元素,那就进行最后一次交换就可以结束了,时间复杂度还挺低的。找最小元素可以通过一个数组提前存入,然后放到后面的顺序可以用堆来维护,这样时间复杂度就可以接近于n。

2024-12-04 21:48:05 255

原创 Codeforces edu 172 C

题解:刚看这道题的时候真是一点思路都没有,看到jiangly大神当签到题几行就过了……其实手玩一下就会发现,每次增加一个分隔,就是为后面的元素的价值都+1,那么这个点知道的话,就可以直接用后缀和来维护每次划线后增加的分数。因为题目是要求差,我们就可以让0的部分视为-1,对后缀和进行排序,从大往小加,如果找到大于k的就算找到最小的了,如果都没找到就返回-1.(记得开long long,没开wa了两发hhhhc)

2024-12-04 21:38:42 186

原创 Codeforces round 989 D

题解:这道题其实赛时做的时候已经大体思路出来了,但是又是忘记了set的这一存在导致tle了,赛时是硬找的。其实就是一个简单的模拟过程。从前往后遍历,找到2的话向后找1(最右边),有的话就交换这俩,没有就已经排序完了(因为题目已经确定好了一定可以排序正确,那么既然不能交换就说明这个排序已经完成)。找到1的话向后找0(最右边)(与前一种方式一样)。这边就是要用set提前存储各个元素位置,然后就可以避免查找。

2024-12-03 20:48:53 200

原创 稻妻解密

在Callisto一行人的野蛮调查后,发现中间的石柱不能够旋转,而其他四个可以旋转。睿智的Callisto立马就想到了打开大门的办法,只要使其余四个可以转动的石柱印有图案的那一面朝向与中间石柱图案面朝向相同即可。那可以这样想,转三个相当于另一个反向转一圈,那我转四次的话就可以使四个的朝向都相同但是朝向改变(可以手玩一下,确定方向)。石柱3和石柱1,4相邻。接下来T行,每行五个字母(N,W,E,S这四个字母其中之一),前四个字母分别表示上图石柱1,2,3,4的朝向,最后一个字母表示中间固定的石柱图案朝向。

2024-12-03 20:39:18 336

原创 Codeforces Round 960 Div2(B—D)

题解:哎,做的时候其实已经想的大差不差了,只不过当时可能头已经被dp搞昏掉了,就是第一反应是中间交叉的点都是1,然后其余的点全都是-1,但是这个的问题在于如果一端的-1太多的话,最大的值肯定是到不了1的,肯定是负数。再手搓一下就会发现,两个为2的数组之间的长度如果满足是偶数,并且中间都是3或4。这里要证明的话就是第一次会将这个序列变成升序,但是存在有元素只有一个的情况,那么这样再下次的时候这个元素就会消失了,只要这次操作之后就能保证升序并且不是末尾的每个元素都有多个,这样就可以进行简单计算了。

2024-11-29 23:05:18 766 1

原创 雪国列车(区间dp)

比如说有个列车在[3,4],那么按道理来说[1,4],[2,4]都是包含这辆列车的,但左节点从前往后遍历的话就无法包含这辆列车。因为区间的dp都是从小到大的。就类似于我已经知道了小区间的元素和,我要求出大区间的元素和,区间dp完全可以这么理解我认为。现在有一个数轴,长度为 𝑁(编号 1∼𝑁),数轴上有 𝑀 辆列车,列车的起点在 𝐿,终点在 𝑅。题解:对于每一个区间[l,r],状态转移方程可以写作dp[l][r]=dp[l+1][r]+dp[l][r-1]-dp[l+1][r-1]+a[l][r];

2024-11-29 21:40:13 269

原创 五子棋对弈(深搜)

就是枚举出2的25次方的二进制数,然后挑出其中1的个数为13的可能性,判断一下有没有获胜就好了。判断方法就是遍历棋盘。这里当时做的时候dfs里面写成(num++)了,但是有两种,那么反正就是num不能自增。题解:感觉思路有点类似于状压,但是还是属于深搜里比较简单的一类吧我觉得。求5*5棋盘上五子棋平局的可能性有多少种。这个可以看做枚举二进制的dp的一个模板。

2024-11-29 21:25:04 531

原创 Callisto的异世界旅行

暴力题,就是要把每种情况都枚举出来。但是如果真的全部枚举显然会非常的大,所以有这样一个理解就是2*3和3*2是一样的,也就是说,不用再去遍历竖边比横边大的那种长方形,于是就有一个判断条件就是i<sqrt(n)(其中i是左边一竖排黑曜石门的个数),实际上这是一个很宽泛的条件,相当于说当竖边超过最大正方形边长的时候,每个门只有一个黑曜石构成,但是开方已经大大降低了时间复杂度,所以这里不用过于深究具体的值是多少。接下来 t 行,每行包含一个正整数 n,表示Callisto拥有的黑曜石数量 (1≤n≤1e9)。

2024-11-27 22:15:29 722

原创 盗墓分赃2(01背包)

题解:这题乍一看是一个子集树的深搜,但算一下复杂度就会发现这个指数级别的是完全不可能的。也就是说对于dp[i][j],表示的是对于前i个宝藏,我取走重量为n的宝藏最多可以取走多少。他们成功盗取了一座古墓中的宝藏,包括 𝑛 件不同重量的珍贵文物和黄金,第 𝑖 件宝藏的重量为 𝑎𝑖。请检查是否存在这样的分配方案,需要注意的是,宝藏不能被分割成两半来调整重量,只能整个宝藏进行分配。现在,他们希望公平地分配这些宝藏,使得小明所分得的宝藏的总重量等于小红所分得的宝藏的总重量。

2024-11-27 21:03:54 187

原创 倒水(01背包)

接下来 𝑛 行,每行五个整数 𝑎𝑖​, 𝑏𝑖, 𝑐𝑖, 𝑑𝑖​, 𝑒𝑖​,第 𝑖 行表示给第 𝑖 位客人倒了 𝑎𝑖​ 毫升水满意度为 𝑏𝑖​,倒了 𝑐𝑖​ 毫升水满意度为 𝑑𝑖​,倒水不足 𝑎𝑖​ 毫升满意度为 𝑒𝑖。这里要特别注意的是如果不足a,那么满意度是要减少的!现在小秋有 𝑚 毫升水,请问他要怎么样给客人倒水,才能让所有客人的满意度之和最大呢?第 1 行输入两个正整数 𝑛 和 𝑚,表示客人的数量和小秋拥有水的体积。输出仅一行,包含一个整数,表示所有客人满意度之和的最大值。

2024-11-27 20:54:56 325

原创 最快洗车时间(二维dp)

如果洗,那么就从dp[i-1][j-a[i]]中转移过来(a[i]表示洗第i辆车所需的时间)。只要有任意一方是洗的,那么dp[i][j]就是可以洗的。只能从不洗的情况转移过来。就是布尔类型的dp[i][j]表示洗前i辆车,用时j是否恰好可以洗完(其中前面的车可以选择任意辆洗或不洗)。可以看出这题的时间复杂度异常高,只能通过暴力枚举的形式才能做完,所以数据范围给的比较小。乍一看好像没什么问题,但是如果是比如说这种情况[1,2,3,999,1000],按照贪心的算法就是前四个为一组,那这样就显然不对了。

2024-11-22 19:51:51 276

原创 可构造的序列总数(二维dp)

题解:这题应用二维dp的原因是ai的倍数有好几种情况。创建二维数组dp,其中dp[i][j]表示到序列在序列第i个位置取数字j有多少种可能。这里对于每一个dp[i][j],都要遍历寻找一个数l,使这个数的倍数是j,为了提高运行效率,可以只判断到l*l<=j的时候,每次加上dp[i-1][l]+dp[i-1][j/l],但别忘记在下面特判l*l==j的情况。最后只要把每一个序列第n个位置数字为i(1<=i<=n)的情况数累加即为答案。初始化的时候就将序列的第一个位置的所有数的情况设为1,表示从这个数字开始。

2024-11-22 19:31:27 237

原创 建造房屋(二维dp)

小蓝和小桥是两位年轻的建筑师,他们正在设计一座新的城市。在这个城市中,有 𝑁 条街道,每条街道上都有 𝑀 个位置可以建造房屋(一个位置只能建造一个房屋)。建造一个房屋的费用为 1 元,小蓝和小桥共有 𝐾 元的建造预算。由于方案数可能很大,他们只需要输出答案对 1e9+7取模的结果。

2024-11-21 22:17:31 312

原创 Codeforces1975C补题记录

题解:当时是没看到要排序最大这个条件,以为是简单地复制在中间的值,心想这题怎么这么简单,然后就wa了,然后就困了(QWQ)。但还是有规律可循的,先单独看数组长度为二的情况,显然是取最小值。然后大于等于3的话可以找到规律,也就是每个长度为3的子数组的中间值可以使整个数组的值都为这个子数组的最大值。† 在长度为 𝑚 的数组 b𝑏 中,中位数是按非递减顺序对元素排序后占据位置编号⌊𝑚+12⌋ 的元素。例如, [3,1,4,1,5] 的中位数是 3 , [5,25,20,24] 的中位数是 20。

2024-11-20 20:03:31 308

原创 Codeforces1975B补题记录

摩卡认为,如果存在两个数 𝑖 和 𝑗 ( 1≤𝑖,𝑗≤𝑛 , 𝑖≠𝑗 ),使得对于所有的 𝑘 ( 1≤𝑘≤𝑛 ), 𝑎𝑘 都能被 𝑎𝑖 或 𝑎𝑗 整除 ,那么 𝑎 就是美丽的。题解:一开始想的是找最小的两个数去让其他的数除,这显然不行。后来又想到找到最小两个素数,如果不足两个再细分……摩卡喜欢数组,所以在出发前,378QAQ 给了她一个由 n𝑛 个正整数组成的数组 𝑎 作为礼物。其实只要排序后用其他的数去除最小的数,除不断的再分一组再除就好了。其实是很简单的一道题,还是没有想出来,加油吧。

2024-11-20 19:56:49 210

原创 Codeforces2031D补题记录

因为往前走只能改变他跳到他前面的最大的树的高度,既然都会跳到这棵树上,那么肯定是跳的越高为自己能争取的机会更多(写的好抽象)。如果这个最小值在最高树的后面,那么就是最高值,结合前面非降序的性质,容易得出这个结果是正确的;然后如果这个最小值是在最高树的前面,那我就跳到了前面的情况,前面的情况就是ans[i+1]了。再比较宏观地分析一下ans[i]=ans[i+1]就是从后往前得出答案,后面的答案都是维护好的,如果能跳到最小值自然后面介于期间的值也是可以跳到的,这边跳的过程可以省略,只要知道可以跳到就可以了。

2024-11-20 19:52:40 185

原创 931B解题记录

解题思路:虽然比较简单哈只有1200但好歹是完完全全自己做出来了,但也不算吧,看了一个27的数据,赛时看不了可能真的不一定能解出来。后来看了一下给的题解看起来比较复杂,但实际上就考虑几个特殊数字,6,12,20,27。然后大于30的转换成小于30的算就可以了。你有 55 种不同的硬币,每种硬币的价值都等于前 5 个三角形数字中的一个: 1 、 3 、 6、 10 和 15。这些硬币类型非常多。你的目标是找出这些硬币的最小数量,使它们的总价值正好等于 𝑛。

2024-11-13 19:54:19 270

原创 930B补题记录

解题思路:这个一开始有点想复杂了,做过类似的dp题,然后有点绕进去了,实际上没这么复杂,所以div2的B题还是尽量地往简单点去想吧。实际上模拟一下思路很清晰,就是找到第一个右边是1下面是0的点,这个点是肯定要往下拐的。至于数量就是找到这个点之前最后一个右边是0下面是1的点,这个点到往下拐的那个点之间的点都是可以随时下去的,答案就是这中间点的个数。†如果两个字符串 𝑠 和 𝑡 的长度相同,那么 𝑠 在词典上比 𝑡 小,当且仅当在 𝑠 和 𝑡 不同的第一个位置上,字符串 𝑠 中的元素比 𝑡 中的相应元素小。

2024-11-13 19:43:54 644

原创 2023蓝桥杯 R格式

解题思路:比较格式的一道题吧,就是之前做过的很大的数a+b。这题学到了咱C++浮点数乘法没这么精确,而且就算是整数也会超数据范围(一开始这个都忘了,卡了)。反正就是列表格算,就这样。小蓝最近在研究一种浮点数的表示方法:R 格式。对于一个大于 0 的浮点数 𝑑,可以用 R格式的整数来表示。1.将浮点数乘以 2的n次方;2.四舍五入到最接近的整数。

2024-11-13 19:21:58 273

原创 926C补题

一开始是觉得每次都投入1不就好了,但是没有考虑可以赢,这样赢了之后就没法赚了要亏了,这样下去很可能就本来可以赚,现在亏麻了,因为保底是会清空的。如果萨沙下注 𝑦 枚金币(其中 𝑦 为正整数),那么如果赢了,他将获得 𝑦⋅𝑘 枚金币(即他的金币数量将增加 𝑦⋅(𝑘−1) )。这题我自己感觉难在理解题目,理解了就是简单的数学问题,算出每次至少需要拿出的钱然后判断会不会超就可以了(写的时候忘记判断这个了。萨沙决定把最好的手提包送给他的女朋友,但不幸的是,这个手提包非常昂贵。在网上查看了赚钱技巧后,他决定去赌场。

2024-11-13 19:12:27 237

原创 986C补题记录

从形式上看,她会将蛋糕分割成 𝑚+1 个子数组,其中每个子数组由一定数量的相邻部分组成。之后,她会把这些 𝑚+1 块分给 𝑚 个生物和她自己(她的块可以是空的)。然而,只有当每个 𝑚 生物的美味度达到或超过 𝑣 时,它们才会感到快乐。解题思路:实际上就是分成m+1块子数组,保证其中至少m个字数组的和是大于v的。这里就是从前往后找恰好大于等于v的子数组和从后往前找恰好大于等于v的子数组。将爱丽丝的数组放在中间,也就是前i个pre和后m-i个suf,遍历寻找最大值即可。茶会上有 𝑚 个生物,不包括爱丽丝。

2024-11-12 15:57:29 162

空空如也

空空如也

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

TA关注的人

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