codeforce div3
文章平均质量分 70
codeforce div3系列
梦念小袁
Hut_acmer
展开
-
Codeforces Round 521 (Div. 3)
的时间复杂度来通过本题,我们在上题的分析基础上分析,可以发现dp[i](选的第i个数的转移来源 一定是选的第i-1个数)所以考虑对此优化,当我选第i个数的时候选到第j个位置时,后面的选到第j+1的数只能由dp[i-1][(max(0,j-k),j]组成这个状态的变化可以通过在转移j的同时用单调队列优化上一层的状态,这样就是满足要求的时间复杂度。注意厘清题目意思,对于每一个数我们只在乎的是它的数量,然后对于题目意思的翻倍处理可以明显的知道最多只会处理20次以内。原创 2024-04-12 19:25:40 · 926 阅读 · 0 评论 -
Codeforces Round 515 (Div. 3)
几何中的dp,我们考虑如果是在同一个大小状态之下,我们可以按照从最左下到最右上的顺序或者是反之,(中间点就在两个点的曼哈顿距离中)最后一定是在这两个位置中的一个取转移下一个位置,所以不妨直接对这两个状态来进行转移。前缀和思路,对于每一次除以之后的操作其实就是整个大于等于这个位置的前缀的数和这个位置数的操作,所以可以直接对其做一个前缀和即可。左右插数,考虑使用的对左右的数用正数和负数来区分即可,如果查询的数是左右两边注意减去0所占据的位置。,为了便于处理是否是被装在盒子里,我们可以直接用数组来表示盒子即可。原创 2024-04-11 20:48:24 · 284 阅读 · 0 评论 -
Codeforces Round 506 (Div. 3)
区间的拼接,我们可以发现最后是由两个部分组成一个是前面的一个是后面的,前面的贡献来源于本身以及后面数的数位,所以我们考虑预处理每一个数后面添加数的位数之后的贡献,然后对于后面的数只需要去找这个数在后面的时候的答案贡献即可(注意自己和自己拼接)我们有个明显的贪心策略就是从权重最大的人的父节点开始操作,如果他的父节点被标记了的话就直接把他父节点的儿子节点也标记,同时注意如果可以在dfs外操作的尽量在dfs外操作否则就一定要理清楚是不是可以递归的,此题我们采用外面取操作即可。原创 2024-03-28 19:19:03 · 439 阅读 · 0 评论 -
Codeforces Round 501 (Div. 3)
考虑到我们要找的数十字,一个十字的大小是由左右上下的点的数量决定的所以我们先预处理出来(可以双指针或者是直接继承的方式如下代码)每一个点左右上下连续的点的数量,然后星星就是枚举每一个点找四周最小的即可,接着对于处理这个点是否被使用过我们可以考虑使用二维差分即可。非常经典的目标字符串出现的题目,我们考虑使用kmp+dp处理,同时考虑这个题目的括号特性我们需要开一个维度来记录当前这个括号匹配到了即可,规定过括号为+1,右括号为负1即可。我们定义dp为构造了i个,当前括号的匹配值是j,同时匹配到了第k个数。原创 2024-03-26 00:05:25 · 366 阅读 · 0 评论 -
Codeforces Round 498 (Div. 3)
我们敏锐的发现如果可以变成一半的话就是可以通过的,于是我们想到可以折半搜索,所以可以得到答案,于是我们开map来记录路径即可,同时注意到一半是(n+m)/2的位置即可。2 a a b b 0次 a a a b 1次 a b a a 1 次。由题知一定是选出最大的m个数然后对这m个数分配线段即可,最后一个是到n。3 a a b c 2次 b c a a 1次。前后缀相等明显的就是双指针,按照双指针的方式来移动使得相等即可。4 a b c d 2次。原创 2024-03-22 21:36:25 · 378 阅读 · 0 评论 -
Codeforces Round 496 (Div. 3)
我们对于求解满足要求的区间数量首先分析,要求是恰好中位数是m的区间数,如果直接求解这样的区间数量是难以解决的,但是我们利用前缀和的思维我们可以简单求解出中位数大于等于m的区间个数,[l,r]对于这个区间只要。最短路径树,我们可以直接按照dijkstra的方式求解即可因为我们要的是根节点到其他的点的路径的最小值,所以不同于最小生成树,同时考虑存起来每一个点的前驱节点。题目是判断是否是存在2的幂次,可以简单得到对于x如果y是对应数,那么对于y,x也是他的对应数。原创 2024-03-21 20:37:07 · 359 阅读 · 0 评论 -
Codeforces Round 494 (Div. 3)
的时间复杂度来解决,接着我们要的是找到一段相同的然后把整个里面相同的进行缩写处理,不妨先把整个用vector<string> 存储起来,接着我们要考虑的就是相同的长度是多少,接着考虑从什么位置开始,我们 由此可以设置状态。构造一棵树我们可以发现如果是又满足的一定是一条直径是d的我们不妨直接把直径构造出来,然后在其中的点加入限制条件之后直接构造,注意题目的意思是构造出来的树直径就是d所以按照题目要求然后对其中的点扩充即可。先按照01010这样的方式把题目要求构造出来然后往中间插入01即可这样答案不会变化。原创 2024-02-23 22:27:37 · 509 阅读 · 0 评论 -
Codeforces Round 486 (Div. 3)
我们明显的可以考虑到dp,有些时候我们可以简单的思考问题我的上一个状态是前面的所有状态还是可以简化位就上一个位置的状态这里明显可以这样来思考这个问题,我们必须要从合法的状态转移过来,也就是我在第i个点手上拿着第几个伞,第0个表示没有伞,然后判断我上一个位置有没有伞我这个位置有没有雨来转移。25的倍数一定是25,50,75,00作为结尾,我们考虑依次移动到后面即可,接着发现可能会出现00的情况我们假设最后是00375我们可以把3移动到最前面即可所以加入一个特判即可。原创 2024-02-17 15:13:31 · 403 阅读 · 1 评论 -
Codeforces Round 490 (Div. 3)
我们可以灵巧使用set来解决问题,为什么这样思考呢?我们肯定十一次性对当前这个数%m的值直接变到应该变化的位置是最好的可以用set来存储还没有抵达的位置然后直接变化过去即可这样就是nlog级别的。我们可以发现有贡献的只有对于喜欢同一种类型的人的分配方式,对于这样一个问题我们可以定义状态dp[i][j]i个人分j张牌的最大喜欢值是多少可以由i-1分min(0,j-m)-j转移过来即可。有向图的连接我们考虑使用缩点的方式来解决问题缩点然后重新建图然后看没有入度的点的数量就是答案。按照题目意思倒着来即可。原创 2024-02-22 23:45:25 · 398 阅读 · 0 评论 -
Codeforces Round 481 (Div. 3)
题目告诉我们关系不会重复不妨这样考虑如果我们从小到大按照能力排序然后对于每一个关系维护前面比他小的有口角的人数,按照他的排序减去有口角的即可,对于相同的数我们在口角中去掉,然后再考虑答案的时候用map来维护前面每一个能力出现的数量再减去即可。简单贪心策略,我们肯定是谁先考试先处理谁他的前面一定是最多的可用空闲时间,然后从他的告诉考试时间考试处理,如果够了就退出,这是一个比较简单且明显的贪心策略,可以简单的证明是正确的。最为经典的前缀和加二分处理,注意我们找到比现在大于等于的然后减去前面的就好了。原创 2024-02-01 22:23:15 · 438 阅读 · 0 评论 -
Codeforces Round 479 (Div. 3)
这一题是一个简单的dp记录方案我们考虑直接用map来存储,用pre表示上一个节点,idx当前位置,dp表示数量即可表示所有的信息从前完后的去找每一个数的x-1是否存在是一定合理的。每一个数的前后数一定是一一对应的所以可以直接记录,然后我们考虑求倒着用下一位记录前一位这样就可以直接倒推(同时注意开longlong)我们可以发现答案是具有二分性质的如果一个数越大少于他的数只会变多所以考虑二分即可。我们发现一个环上的一定都是每个点都是有两个子节点,这就是这题的性质然后dfs即可。按照字符串也是直接模拟即可。原创 2024-01-31 21:44:59 · 361 阅读 · 0 评论