- 博客(203)
- 收藏
- 关注
原创 关于交换并查集内元素的一些题的做法
思路:和上面那题其实大差不差,甚至更加简单,我们只需要去统计每个字母位置的门牌号变成什么即可,因此我们之间开26的数组,然后去按照题目去交换门牌号即可。思路:杭电春季赛的一道题目,但是如果除去3操作,那么其实本身还是相当于一个并查集的题目,因此我们还是可以用上面那个相互映射的思路来处理这个问题。第二种操作,将a和b巢的鸽子交换,那么我们可以先换门牌号q[p[a]]和q[p[b]]交换一下,再交换记录的位置p[a]和p[b]第一种操作,将a鸽子移动到鸽巢b,那么就是f[a]=p[b]即可。
2025-03-30 10:58:14
304
原创 OMRON Corporation Programming Contest 2025 (AtCoder Beginner Contest 397)题解
思路:按照题意模拟即可。
2025-03-19 17:49:15
801
原创 牛客周赛 Round 85
这场的六个题对标洛谷应该就是 红,红,橙,黄,橙,黄我们来看一下这些题吧因为每次只拿一颗石子,连博弈论都算不上,奇数小红赢,偶数小紫赢。
2025-03-19 14:07:16
855
原创 牛客周赛 Round 84
这场比赛确实比以前的水了很多,不过不影响,有学习意义即可思路:直接判断三个数是否相同,想通就输出Yes,否则就是No。
2025-03-11 15:08:53
385
原创 Educational Codeforces Round 174 (Rated for Div. 2)(A~C题解)
思路:我们发现 位置上的每个数只会出现三种情况1,2,3,只有这三个数字,没有多余的情况,那么我们来考虑一下怎样才是一种合法的情况,我们在题目上发现,要求最小长度为3,并且每个数左边都有一个比他小的数,右边都有比这个数大的数,仔细分析一下发现其实他要找的序列是以下这种。(1)如果选择当前位的2,并且前面一个2也不选,那么dp[i][2]+=dp[i-1][1],在前面的1中选择一个。(2)如果选择当前位的2,并且前面选择任意的2,那么dp[i][2]+=dp[i-1][2]然后我们来分析过程,
2025-02-19 12:01:32
398
原创 Codeforces Round 1005 (Div. 2)(A~D题解)
思路:我们对于这题来说,其实就是去统计01或者10的个数,我们只需要在最前面a[0]的位置放置一个0即可。
2025-02-18 16:55:43
771
原创 Codeforces Round 1004 (Div. 2)(A~C题解)
2.另外一种情况就是(x-y+1)%9==0,并且x>y的话,也是能够满足的,因为9+1会进位缩短至少8,如果是99则会缩小17,因此如果x>y&&(x-y+1)%9==0那么也是满足的。思路:直接用map跑一遍就可以了,我们对于每一个i这样的数字只需要留下两个,然后向上转变成i+1,知道碰到map[i]变为奇数就是"NO",否则就是“YES”思路:其实就是一个搜索的问题,我们没一位最多只会加上十次,因此我们之间对每一位进行爆搜即可。1.当y=x+1时,那么一定是yes这个不需要过多阐述。
2025-02-16 17:26:49
448
原创 AtCoder Beginner Contest 393(A~F题解)
思路:一个简单的逻辑题吧,第一个人吃了1,2两种牡蛎,第二个人吃了1,3两种牡蛎,既然四个牡蛎里面只有一个有毒,那么可以分四种情况1.都良好,4牡蛎有毒2.第一个人良好,第二个人中毒,3牡蛎有毒3.第一个人中毒,第二个人良好,2牡蛎有毒4.两个人都中毒,1牡蛎有毒。
2025-02-16 10:35:08
1043
原创 牛客小白月赛110
思路:水题一个纯模拟就可以了,我们让n/500确定前面的字母,然后n%500确定后面的数字思路:这题一开始没看懂干嘛,愣了一会儿,后来就发现,其实就是给你两个字符串,第一个表示后台的单词,第二个是你当前的单词,如果当前位置,你的单词和你后台的单词一样就是g(绿色),如果当前位置,你的单词不为后台的单词,但是后台单词出现过你这个字符,那就是y(黄色)否则就是r(红色)如果全是g,那么就是祝贺,否则就是失败。
2025-02-15 17:42:37
317
原创 Codeforces Round 1003 (Div. 4)(A~G题题解)
思路:把字符串最后的us变成i就可以了,水题一个思路,有一对相邻的相同就可以把整个序列的长度变成1,否则就是原长度思路:本题b数组只有一个数,那么我们将a数组所有数都与b数组进行计算,我们设x=a[i],y=b[i]-a[i],1.假设x和y都大于等于前面一个,我们就选择min(x,y)作为a[i]2.如果只有x大于等于前面一个,就选择x作为a[i]3.如果只有y大于等于前面一个,就选择y作为a[i]4.如果都不大于,就输出NO结束这次测试数据如果运行到最后就是输出YES。
2025-02-11 22:22:24
1160
原创 欧拉筛详解(代码,证明过程以及时间复杂度分析)
欧拉筛:可以在线性的时间复杂度内,从1~n之间的素数的集合,并且在操作过程中可以记录素数数组,为以后判断是否是素数而加快效率和大部分的筛法一样,通过将质数的倍数标记为合数来不断筛选质数的一种方法,欧拉筛的大致思路也是这样,不够欧拉筛能实现O(n)时间复杂度的必然有他的过人之处。
2025-02-11 20:18:36
844
原创 AtCoder Beginner Contest 392(A~E题解)
思路:直接将其排序,如果最小的两个相乘等于最大的,那么就是Yes,否则就是No。
2025-02-09 10:47:09
1008
原创 优先队列priority_queue用法和tuple用法详解
tuple:用于将多个值组合在一起,形成一个有序的元组。每个值在tuple中都有一个对应的索引,可以通过索引来访问和操作其中的值。(完全可以类比结构体,只不过是比结构体在特定情况下更加好用,比如和优先队列的结合)C++中的tuple是一个标准库类模板,用于存储固定数量的异类对象。允许将多个对象捆绑成一个单一的对象,并且可以轻松地从中提取值或者通过结构化绑定将其解构到不同的变量中。tuple提供了一个通用的数据结构,可以保存不同类型的元素,并通过下标或get函数来访问其中的值。
2025-02-08 14:59:58
402
原创 Codeforces Round 1002 (Div. 2)(A~D题题解)
解析:我们发现c数组是由a和b数组累加来的,我们可以对a数组进行 随意的排序,因为a,b数组都是好数组,我们会发现只有三种情况满足最终的情况1.a和b数组去重后的个数都等于22.a数组去重后的个数大于2,b数组可以任意3.a数组任意,b数组去重后的个数大于2这三种情况是满足最终结果的,只需要用一个set存储,去判断其size大小即可思路:我们可以发现最大的组内个数为n-k+1个,因此我们可以对其分情况讨论。
2025-02-08 11:42:48
1086
原创 牛客周赛 Round 76题解
思路:我们发现,每七天可以获得15元,那么我们可以对7取模,看能有多少7的倍数,然后剩下的就是看是否超过5,超过5就直接+15,否则加上天数*3思路:直接输出出现频率最高的字符即可。
2025-01-13 23:35:38
361
原创 树的重心总结
如果在树中选择某个节点并删除,这棵树将分为若干棵子树,统计子树节点数并记录最大值。取遍树上所有节点,使此最大值取到最小的节点被称为整个树的重心。(这里以及下文中的「子树」若无特殊说明都是指无根树的子树,即包括「向上」的那棵子树,并且不包括整棵树自身。用通俗一点的语言,就是将这个点去掉后,剩下的最大子树最小。
2025-01-07 00:57:36
350
原创 tarjan算法——割边
今天也是小小的学了一个tarjan算法中的割边的一个应用他和割点很像,都是用来处理无向图的,只不过是不能走反向边罢了我们首先来说一个割边的定义。
2024-12-30 19:18:08
327
原创 Educational Codeforces Round 173 (Rated for Div. 2)题解
思路:思考一下,会发现能不超过每消耗一个4会产生一个2,因此我们有不超过4^x次方的硬币,最多只会变为2^(x-1)的硬币直接敲代码即可思路:通过分析后,会发现,数的各位数总和为为n!*d,我们可以发现,其实那个阶乘最大取到9就可以了,所以我们算出来n!*d,然后能够取模3等于0就说明3是可以的,取模9等于0就说明9也是可以的,只有d为5的时候才能包含5我们来证明一下7的思路。
2024-12-27 14:13:11
727
原创 Codeforces Round 995 (Div. 3)(A~F题解)
不要问为什么没有G,因为G我还没搞明白,我是蒟蒻,补药降维打击窝。
2024-12-23 17:29:20
1996
1
原创 Codeforces Round 994 (Div. 2)
思路:我们通过分析可以知道,最多只能赋值到2,因此我们可以将x赋值为1,y赋值为0,去寻找顺时针间隔和逆时针间隔,若间隔长度为偶数,那么直接跑01序列,否则就先填一个2,再跑01序列即可。我们应当用暴力去枚举发生反转的情况,因为m的数据,并不大,最高只有200,完全不用担心会超时,枚举m次,然后去寻找最小的到达dp[i][j]的最小值。//表示从左或者从上的最小值,加上当前的值。思路:我们首先设两个数组,dp[i][j]表示第i行第j列的最小成本,然后用ans[j]去统计每一列的最小成本。
2024-12-23 16:38:29
398
原创 AtCoder Beginner Contest 385(A~F)题解
先写上A~E的题解,后续补题会将F补上去思路:由题可知最多只能分成三组,我们只需要判断是否三个数都相等,或者两个数相加等于另外一个数即可。
2024-12-22 11:51:43
488
1
原创 牛客周赛 Round 72 题解
本次牛客最后一个线段树之前我也没碰到过,等后续复习到线段树再把那个题当例题发出来思路:正常模拟,从前往后遍历一遍去统计即可。
2024-12-18 21:14:37
381
原创 Codeforces Round 993 (Div. 4)题解
思路:经过看了一眼,我们发现,a+b的和一定是n,且两个都是正整数,所以a的范围就是从1~n-1所以输出n-1即可思路:稍加思索一下就发现,其实从里面看的话,就是将字符串翻转之后,将p变成q,将q变成p。
2024-12-17 22:45:37
1045
4
原创 拓扑排序初讲
拓扑排序(Topological Sorting)是指将(DAG, Directed Acyclic Graph)中的所有顶点按某种的一种算法。其要求是,对于图中的每一条有向边 U -> V 在排序结果中顶点U必须出现在顶点V之前。拓扑排序常用于,例如任务调度、编译顺序等,能够有效地帮助我们确定应先完成哪些任务。拓扑排序的常用算法有 Kahn 算法和深度优先搜索(DFS)算法。
2024-12-16 22:25:02
347
原创 Codeforces Round 992 (Div. 2)
这场cf只在b卡了一下,因为b真是犯蠢了,我以为会向下取整,结果是完全就不取整,或者说是向上取整,卡了我半个小时,要不是紧急看了题一下,昨天那场就毁了话不多说,直接开讲思路:很容易就能看出来就是同余定理,能够找到一个取模k的数,且只有这一个数取模k为当前的余数,那么就输出这个数,否则一定存在两个数相减会导致能被k整除。
2024-12-09 23:37:07
505
原创 数据结构——对顶堆
比如说我们要维护第k大的数,那么我们肯定是将前k大的数放进小根堆,小根堆的堆顶就是第k大的数。由一个大根堆和一个小根堆组成,小根堆里面的数永远比大根堆里面的数要大。
2024-12-08 10:11:34
351
原创 Codeforces Round 991 (Div. 3)题解
先随随便便写一点东西吧,毕竟只是一场div3思路:一道很简单的模拟题吧,就是遍历一遍,当大于x的时候就break,然后前面那个就是找到的前x个字的总长度不超过m。
2024-12-07 20:39:15
681
原创 MarsCode第一次比赛
很高兴能参加这种大厂出的比赛昂,但是只感觉题好水,我以为是百度之星的那种级别,没想到是div3的这种级别的题,太水了,就是一开始代码不是我平常的那种马蜂,改变了一下马蜂才开始正式写题的,因为现在看不到题目,全凭我自己口头描述前三题代码我就不放了,太水了,第三题直接从博客复制的板子过去,速切的。
2024-12-07 17:03:16
336
原创 牛客小白月赛106
这场比赛没有做好,只拿下了三道题,当时该跳过第四道去处理第五道题的,第四道题的思路当时想错了,以为是要用数论去求解,其实普通的最短路就可以求出,当时没有想好,以为是自己没做对思路:我们首先分情况看b是否是01.当b是0的时候, a^b次方永远是1,所以,结果就是c+d是否是奇数,若一个是奇数,一个是偶数,就输出YES,否则输出NO2.当b不是0的时候,那么奇数的次方永远是奇数,偶数的次方永远是偶数,所以只需要看acd的就行即可ac都为奇数才是奇数,d为偶数则是YES,当d为奇数那么就是NO。
2024-12-07 16:33:48
791
原创 单调队列收摊——用于处理窗口内最值问题
因此我们可以将我们发现,当右端确定的时候,左端的差值越大,最终结果的值也就越大,因此我们可以在单调队列里面去存储x和y的差值,从队头到队尾是单调递减的,因此当我们确定了右端点的时候应当直接去加队头,看是否能够更新最大值,同时呢,在右指针向后滑动的时候,有可能区间长度超过了k,因此就要将左指针向右滑动,逐渐弹出不合理的队头。我们可以想到,要去完成k个任务,那么我们必定是抽取k个最小难度的任务和k个能力值最大的人,因此我们可以用一个单调队列去存储任务,我们。顾名思义,单调队列的重点分为「单调」和「队列」。
2024-12-05 20:17:33
411
原创 数据结构——单调队列
这篇博客我们来讨论一下单调队列的问题,其实和之前学的单调栈都是一种上通过改变操作来解决问题的一种我们先来回忆一下的内容,这样方便将其和做区分1.单调栈是一种,只能在栈顶进行插入和删除操作。2.单调栈的特点是栈中的元素按照,常用的有单调递增和单调递减。3.在插入新元素时,如果新元素破坏了当前的单调性,则从,直到满足单调性 要求。这样可以保证栈中的元素保持单调性。4.单调栈的典型应用是在单调队列:1.单调队列是一个,支持在队列两端进行插入和删除操作。
2024-12-04 19:40:39
1119
原创 Educational Codeforces Round 172 (Rated for Div. 2)A~C题解
思路:我们通过观察可以发现,当我们在一个位置之前划上一个分组的时候,其后缀相当于所有元素都+1分,所以我们要统计后缀合,然后将后缀和去进行排序,然后累加,去判断是否能达到k,如果小于k,那么就要输出-1,否则就去统计刚才划了多少的线,然后输出n-线的数量+1就是组数,但是我们等下排序的时候不能统计第一位,因为第一位永远是0。题意:给你n个箱子,每个箱子有若干金币,但是这些箱子的金币总和至少达到k,然后M那个人偷金币,他会从最多金币的箱子开始偷,然后至少偷满k个金币。
2024-12-03 11:51:03
801
2
原创 牛客练习赛132 题解
直接排序去重,跑一遍双指针就行,去判断数值之差和下标之差是否大于k,大于k就说明鬼牌无法填补差距,让其成为顺子,就让左边指针去向右滑,否则就去计算当前计算的区间长度+剩余的鬼牌数量即可,但是这里要注意,有可能剩余鬼牌,大于剩下的位置,所以要将剩下的位置和鬼牌数量比较一个最小去和区间长度叠加。这个你在纸上算一下,就会发现,算面积的时候,只有两边的木棍只用了一次,中间的都是两次,所以,我让最小和次小在两边,其余在中间,然后算面积,保留两位小数就是结果。),坐等官方发题解,然后补第四个题。
2024-11-30 01:54:37
463
原创 牛客周赛 Round 69题解
好水的题,先算出来a,b的差,然后让a,b的最大值加上那个差就可以了两种方法,第一种是c快速秒另一种就是全都看成字符串,然后去求第一个逗号和第二个逗号之间的数和第二个逗号之后的数,然后作差思路:纯思维,我们可以将向量转变成矢量的形式,因为经过折射,所以在z轴的运动距离应当为h+h-z在x轴运动的距离为x在y轴运动的距离为y所以矢量为(x,y,2*h-c)然后将gcd(x,y,2*h-c)消去即可。
2024-11-25 22:05:01
397
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人