首页 > 其他分享 >几道好欺负的杂题

几道好欺负的杂题

时间:2023-05-02 16:12:43浏览次数:36  
标签:cdot text 转移 几道 欺负 mathcal 杂题 MEX dp

P7325 [WC2021] 斐波那契

会同余 + set 可以解决改题。

CF1264D1 Beautiful Bracket Sequence (easy version)

性质题,找到性质后就不会很难了

CF1264D2 Beautiful Bracket Sequence (hard version)

上一道题的强化版,如果你会范德蒙德卷积就很简单了,否则需要考虑组合意义来优化 dp

CF1608F MEX counting

好前三道题是因为写了题解了就不多说了,这里把这道题的题解写一写。

分析题目,发现题目的意思是想让我们的 \(\text{MEX}\) 处在一个范围 \([l,r]\) 之内。

首先最朴素的 dp 状态还是比较套路的,就是设 \(dp_{i,j,k}\) 为已经处理到了 \(i\) 个数,此时的 \(\text{MEX}\) 为 \(k\),且比它大的有 \(j\) 个不同的数的方案数有多少。我们首先不难想到将转移分为两大类,分别是接下来填的数不是 \(\text{MEX}\) 和接下来填的数是 \(\text{MEX}\) 这两类。

考虑接下来填的数不是 \(\text{MEX}\) 怎么转移,我们可以发现有三类转移:

  1. 填了一个小于当前 \(\text{MEX}\) 的数字:

\[dp_{i,j,k} \to dp_{i+1,j,k} \]

  1. 填了一个大于当前 \(\text{MEX}\) 且之前出现过的数字:

\[j \cdot dp_{i,j,k} \to dp_{i+1,j,k} \]

  1. 填了一个大于当前 \(\text{MEX}\) 且之前没出现过的数字:

\[dp_{i,j,k} \to dp_{i+1,j+1,k} \]

考虑接下来填的数字是 \(\text{MEX}\) 该怎么转移,显然有废话 “如果 \(\text{MEX}\) 的值发生改变,则新改变的值一定大于原先的值”,所以考虑枚举新的 \(\text{MEX}\) 转移,设新的 \(\text{MEX}\) 为 \(t\),于是有:

\[A^{j}_{t-k-1} \cdot dp_{i,j,k} \to dp_{i+1,j-(t-k-1),t} \]

此时,我们不难看出我们的时间复杂度为 \(\mathcal O (n^4)\),空间复杂度为 \(\mathcal O(n^3)\),无法通过此题。

考虑如何优化,首先我们可以发现在进行接下来填的数字是 \(\text{MEX}\)的转移时,有很多转移是没有必要的,事实上我们只需要转移 \(k\) 次就好,因为当我们的 \(\text{MEX}\) 大于 \(k\) 的时候是显然没有意义的,此时时间复杂度被优化到 \(\mathcal O(n^2 k^2)\),依旧无法通过此题。

我们仔细观察最后一种转移,发现其本质就是做了一次相邻的斜着的转移,所以完全可以做前缀和,但是发现如果这样搞前缀和是一个斜着的情况,所以我们可以给第二个状态 \(+k\) 将斜着的转移拉直,考虑这样之后的转移的变化:

\[j \cdot dp_{i,j,k} \to dp_{i+1,j,k} \]

\[dp_{i,j,k} \to dp_{i+1,j+1,k} \]

\[\frac{(j-k)!}{(j-1-t)!} \cdot dp_{i,j,k} \to dp_{i+1,j+1,t} \]

时间复杂度被我们优化至 \(\mathcal O(n^2k)\),可以通过本题,实际上还需要一点点的卡常技巧。

对于 \(i\) 这一个维度,我们可以考虑滚动数组来优化我们的空间,否则应该会炸。

标签:cdot,text,转移,几道,欺负,mathcal,杂题,MEX,dp
From: https://www.cnblogs.com/larry76/p/17367809.html

相关文章

  • cf 数据结构杂题
    rand一些题目做一下,持续更新平衡树gym101261APersistentDequeYouneedtoprocessthefollowingqueries:Bvx—Addxtothebeginningofthedequewithversionv.Evx—Addxtotheendofthedequewithversionv.<v—Removethefirstelemen......
  • 几道分块题
    思路都差不多,实现细节上有区别。P5356[Ynoi2017]由乃打扑克小卡常分块点击查看代码#include<bits/stdc++.h>usingnamespacestd;namespaceIO{ #defineBUFSIZE10000000 structread{ charbuf[BUFSIZE],*p1,*p2,c,f; read():p1(buf),p2(buf){} inlinechargc......
  • 杂题记录
    2023.4.27下午LZY讲题ICPC2022Shenyang-G题意给定\(n\)个点的两颗树\(T_1,T_2\)。\(m\)次询问\((a,b)\),求\(\max\limits_x\{d_1(a,x)+d_2(x,b)\}\)。\(n\leq10^5,q\leq5\times10^5\)。提交地址https://codeforces.com/gym/104160/problem/G。分析考虑若给定......
  • 盘点几道Python面试题【ChatGPT作答】
    风吹仙袂飘飖举,犹似霓裳羽衣舞。大家好,我是皮皮。一、前言前几天在Python白银交流群看到了几道Python基础题目,这里拿出来给大家分享下,感兴趣的小伙伴可以学习学习。1、字典、元组、列表、集合的区别是什么?2、什么是装饰器,怎么用?3、为什么要有闭包?4、什么是订阅发布模式,写一个demo5......
  • 4月CWOI杂题
    tips:为了避免一不留神题目就被邪恶的o老师隐藏,题面文件在cnblogs上有备份。C0216【0407C组】模拟测试这场比赛四道题代码加起来长度不超过1500个字符,赢!(223+399+330+541=1493)A【1231C组】数组计数定义\(f_{i,j}\)表示前\(i\)个数,和为\(j\)的方案数,前缀和优化转......
  • 4月CF杂题
    CodeforcesRound862(Div.2)E.ThereShouldBeaLotofMaximums题意:定义一棵点有颜色的树的\(\text{MAD}\)为树上编号最大的出现了至少两次的颜色。对于树上每条边,求出断开它后生成的两棵树的\(\text{MAD}\)的最大值。\(n\le2\times10^5,a_i\le10^9\)。先找到整棵树......
  • 4月AT杂题
    AtCoderBeginnerContest296D-M<=ab题意:求最小的正整数,不小于\(m\),且能被表示为两个不大于\(n\)的正整数的数,不存在输出-1。\(n,m\le10^{12}\)。直接枚举\(a\),计算最小的满足\(ab\gem\)的\(b\),如果\(a>b\)则后面的情况一定是重复的。时间复杂度\(\text{O}(\sqr......
  • 4月杂题
    距离NOI2023还有109天,不能再沉溺于省选的成功了。开始更新博客!4月重点在whk上,不会更很多,为了调和whk的。1.[NOI2023联合省选]填数游戏考虑对于第\(i\)个数,把\(T_i\)中的两个数连边,特别地,只有一个数连自环。此时每个连通块只能是树/基环树。基环树是好做的,因......
  • 【杂题乱写】ARC108
    AtCoderRegularContest108ASumandProduct\(O(\sqrt{n})\)枚举约数判断即可。BAbbreviateFox用栈维护,每次判断栈顶是不是fox,是则弹出。CKeepGraphConnect......
  • 杂题乱做4
    P8499首先,显然需要树哈希。哈希方法见OIwiki。设\(f_i\)表示\(i\)子树的哈希值,那么我们如何判断\(G\)能否通过删去不超过\(k\)个点变成\(H\)?考虑\(solve(i,j......