- 博客(144)
- 收藏
- 关注
原创 Atcoder ABC383
考虑类似kruscal求最小生成树的做法,对边排序,从小到大加入。实际上,当点对在同一颗最小生成子树中时,点对的f值就是最小生成树当前遍历的边w。因此我们先做出2000000以内的质数表,然后前者暴力或者求前缀和都可以,后者直接暴力。分组背包,将同一个颜色归为一组,然后对每一组开一个背包计算在这一组上面容量为j时能获得的最大分数。这种N的排列求最佳匹配已经没有什么算法复杂度可言,关键是找到一种方法去贪心。放入所有的H点,bfs在D步内能访问到的点。是第i组运行完后容量为j时的最大分数。
2024-12-10 22:06:54
388
原创 Atcoder ABC382
排序之后会发现,每个人一定会把最前面的那些满足条件的寿司拿走。因此可以用一个指针指向当前拿到的寿司位置。从下往上排序,落下来的线段要检查[l,r]上最大值,然后落在最大值+1的行上。或以上的数量稀有卡片需要的期望次数。n人来看每个人怎么拿。有无数个包,每个包里面都有N张卡片,每张卡片是稀有卡的概率是。问:抽到S张稀有卡片或以上,需要打开包的数量的数学期望。分情况写的太麻烦了,有一个dfs的思路还不错,TODO。一次只能打开一个包,然后拿出所有卡片抽卡。为抽到第i张卡片时有j张稀有卡的概率。
2024-12-06 22:27:12
896
原创 Atcoder ABC381
可以得到以该/为中心的11/22子序列长度=min(左边1的数量,右边2的数量)可得,左边1的数量从左往右增加,右边2的数量从左往右减少。先看一个简化版本:不是1122串而是普通的数字串,且串内不能有相同数字,求最长子序列。1122串指的是类似11223344这样的串,串中元素为数字,且同一个数只能出现2次。所以集合1 2 3的最短位置是4,且在N之内,说明这个最长子序列的长度为集合的长度3。但是需要加上限定,我们可以找到这个数之前出现的位置,然后取一个上限即可。但上一次22的位置在2,所以。
2024-12-06 10:51:19
610
原创 Atcoder ABC380
把整个排列的逆序数分为两种类型,一种是纯在窗口内部的逆序数,另外一种是其他。因此做题的时候就可以维护窗口内部的逆序数个数,然后算出当前第二种逆序数的个数,最后的期望=第二种逆序数的个数+随机排列下的逆序数个数。把相同颜色的格子看成线段,用一个有序数组set记录线段的起点,并记录下这些线段的颜色。然后用上博弈两原则:所有的下一步都是指向对方的必胜态那么本方必败,如果有一个下一步是对方的必败态那么本方必胜。首先,最后的字符串一定为一开始第一步的S和T组成,那么先要求p位置是在S中还是在T中。
2024-11-29 10:25:17
862
原创 Atcoder ABC 379
但是算两个联合起来,如果先算r看见的LIS,然后去判l和LIS的关系,不太好做。反过来,先算l看见的LIS,再看r在LIS中的位置,我们就可以很容易做出来。当有连续的k颗健康牙齿时,可以吃掉一颗草莓。石头只能往右边移动,最后需要让每个格子里有一个石头。如果满足,最后将题目看做是在一个数轴上移动数字的问题。字符串ooxxx代表牙齿,其中o代表健康的牙齿。在一列格子里面有m个位置存着石头,每个位置。代表的整数里的每个子字符串加起来,求和。2.浇水h,此时所有树的高度增加h。3.收获w,此时所有>=w的树收割。
2024-11-27 14:03:00
988
原创 ABC334
的状态划分,不要想去上一步维护礼物的数量,而是干脆用回到家作为一个状态结束的标志,然后维护。最后求出区间树的数量,注意两边都是闭区间。随机抽一个红色的格子将其转换为绿格子,问转换后绿色的连通格个数的期望值。随机抽一绿色的格子将其转换为红格子,问转换后绿色的联通格个数的期望值。首先是贪心配对,如单独的袜子是偶数,那么按小到大两两组合。我们在单独的袜子中观察,因为相邻的两项如果中间有成对袜子。如单独的袜子是奇数,那么需要遍历每一只可能丢弃的袜子。的方格里面,每个格子为红或者绿。的方格里面,每个格子为红或者绿。
2024-11-13 22:32:16
518
原创 ABC377
我们手动来看例子:5,6,3,1,2,4 -> 2,4,3,5,6,1 -> 4,5,3,6,1,2 -> 6,1,3,2,4,5。按顺序插入,插入的时候去看每个位置到之前的叶子节点最短是多少,这就是先删除到插入位置再增加字符的最小代价。如果l点是这一系列线段中的左端点,那么这一系列以l为左端点的线段其中的最小右端点-1就是r的取值上限。但是我们从右往左遍历,如果之前的线段右端点的取值上限更小,那么也是取不到的。遍历1时r的上限不能取6,因为[1 6]会把[4 5]覆盖。求每个点l有多少点r组成的线段。
2024-11-08 11:29:57
1044
原创 ABC335(E-G)
可以采用计算连通子图时常见的策略,将同A值并连接在一起的点缩成一个点。我这里用的是并查集。本题需要128位整数,因此用python来写,pypy效率和g++比起来也不算太差。但是点的A值可能是相同的,如何判定谁在前面?最后一步证明略,可参见初等数论阶的章节。不同的条件限制,那么题目就是简单的dp。首先需要知道什么是阶以及怎么求阶。和中的数据项较少,可以直接做。或者用拓扑排序从点1开始。由于项中的下标有统一规律。暴力不可取,容易退化到。这种形式,会联想到分组。记录从右往左遍历得到的。被s除得到余数r的总和。
2024-10-29 22:39:14
1091
原创 ABC376
两种情况都只需要三个值:需操作的棋子上一次位置,需操作的棋子这一次位置,另一枚棋子上一次的位置,这样可以根据情况推断出另一枚棋子本次位置。第二种情况是B题的堵路,另一枚棋子在移动路径上面,那么将该棋子往前移动一格。n-1个盒子,n个玩具,每个物品都有一个体积,现在增加一个盒子,使每个玩具都能放到盒子里面,放进去需要玩具的体积比盒子更小。要求乘积最小值,那么就要使得下面的和最小,换言之选出最小的K个数,这用堆维护即可。是第i次操作完成后,另一枚棋子在位置p上时的最小步数,转移都是O(1)的。
2024-10-22 15:59:59
655
原创 ABC375
由于数太大,需要给一个大质数,记录f%m。这里一个质数往往不够,需要使用两个质数,bloom filter的思路。需要注意到旋转是按照由外向内分层次旋转的,第一层顺时针转1次,第二层转2次,第三层转3次。因为反过来加边是可以用类似prim算法的松弛操作来做最短路,所以考虑离线操作,倒序,将数组分为三个数组ABC,现在需要移动一些元素,使得三部分的和相同,求最少移动几个?一开始先用prim求出两点间的最短路,然后对每一条加回去的边进行松弛操作。,数组A里和为a,B和为b,需要最少移动的个数。
2024-10-15 17:06:43
1038
原创 ABC339
随机化题,思路是bloom filter的方法,知道这个方法就不难。每次操作只能将两个棋子同时上下左右移动,如果棋子被墙挡住就不能动。获取长度最长的子序列,其中相邻两项的差绝对值不得大于d。如果两个大质数还是wa,那就再来一个filter。在一个N*N的平面中有一些墙,还放置了两个棋子。如果没有数据限制,问题规模也不是特别大,把。问最少需要几步能将两个棋子走到一起。的限制,所以好做一点,直接上线段树。范围内的最大答案再加1。这些点离散化就可以了。
2024-10-11 08:57:29
952
原创 ABC340
对单点更新(清零)–就是区间更新,单点查询,裸的线段树。给(0,0)点和(X,Y)点,求任意(A,B)点使得三角形面积为1。将格子里面的球拿出来,按顺序依次放到所有格子里面,每次放一个。围成一圈的n个格子,每个格子里都放着。N的一个数组,一开始在格子1。用map记录一下每个n的总得分。对于格子i有两个操作,一个花费。求最后每个格子里有几个球。每擦一个数n计入分数n。擦去每个大于1的数n。到i+1,第二个花费。求最后到N的最小花费。扩展欧几里得做就好了。
2024-10-10 13:53:33
871
原创 ABC374
给定一些线段,机器从(0,0)点开始移动,画线段时的速度为S,不画时的移动速度为T。N道工序,每道工序有两部分机器组成,你可以选任意个机器去制造零件。将一个数组分为两部分,求不同分法中更大那一部分和的最小值。第一部分:每个机器制造A个零件,每个零件需要P元。第二部分:每个机器制造B个零件,每个零件需要Q元。需要运送n个货物,每个货物的运送时间都不能在。为第i个工序的第一部分机器数量,求机器画完所有线段的最短时间。对于天数D,每个货物的代价是。设每道工序最后的零件数为。,在总的预算X约束下。
2024-10-09 11:32:47
580
原创 ABC 344
格子里面只能往下走或往右走,其中往下走或者往右走都需要花费一个step,并花费一定的能量。个string数组,依次拼接,每次只能从数组里面选取一个字符串拼起来。,当能量不够时不能行走。停留在原地可以获得能量。都是大小为100以内的数组,给出。python split最快。,但要花费一个step。最少需要几个step。保证操作中无重复元素。求数组最后的所有元素。
2024-09-05 13:17:44
564
原创 vector如何实现有序数组?
但我们可以使用vector和lower_bound进行类似的操作:使用lower_bound找到插入的位置,使用vector::insert插入该位置。正统的做法是维护一个最大堆和一个最小堆,最小堆的数在后半部分(比最大堆大),最大堆的数在前半部分,每次取最大堆的堆顶。但是写起来比较麻烦。python中有第三方库SortedList,C++并没有这样的stl库。,使得其保持有序,而且支持插入时间为。有序数组维护一个序列。
2024-02-07 09:27:41
458
原创 贝肯鲍尔逝世
可以说上古大神里面最亲切,也是每次电视转播里面都坐在拜仁看台上面的老朋友一样的教练、主席,他也抵不过岁月,走了。一个年轻人没有电子游戏的、足球的黄金时代的终结。90年世界杯的贝肯鲍尔和马特乌斯。
2024-01-09 08:06:04
399
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人