首页 > 其他分享 >Solution Set #3

Solution Set #3

时间:2024-06-07 09:15:52浏览次数:10  
标签:pre 二分 Set text Solution leq 集合 考虑

整理了 \(3\) 月的做题。

30. AT_arc106_e

想到二分图就好做了吧/youl

二分答案 \(mid\),上界显然为 \(2nk\),考虑网络流模型:右部图 \((i,j)\) 表示第 \(i\) 个人第 \(j\) 次颁奖,左部图表示 \([1,mid]\) 的所有天,每个人往能跑到的天连边,判断是否存在右部图的匹配即可。

\(n\leq 18\) 明示状态压缩。

考虑,预处理出每一天来家的朋友的状态 \(t_i\)。

判断是否存在完美匹配,考虑 Hall 定理:\(\forall S,|N(S)|\ge |S|\)。考虑左部图点集的子集 \(S\),\(N(S)\) 是什么东西:所有右边的人,与天数集合 \(S\) 有交集的人数量 \(\times k\)。

有交集容斥成总数减不交。处理 \(f_S\) 表示被 \(S\) 完全包含,进行高维前缀和即可。

31. P10200

注意到结论 \(\min(a\oplus b,b\oplus c)\leq a\oplus c\),所以两个集合分别排序之后,我们只需要考虑相邻两个数的异或和。

朴素的 dp 是,仅考虑前 \(i\) 个数,\(f_{i,j,0/1}\),\(a_i\) 被放入第 \(1/2\) 个集合,第 \(2/1\) 个集合的最后一个是 \(j\) 的合法集合对 \((S_1,S_2)\) 方案数。

考虑 \(i+1\) 放入第 \(1\) 个集合中,若 \(a_{i}\oplus a_{i+1}\ge k_1\),那么可以直接先继承 \(f_{i,?,0}\),同理有 \(f_{i,?,1}\) 的继承。

考虑当前结尾 \(i\) 是集合 \(1\),\(i+1\) 是集合 \(2\),那么我们可以考虑对于 \(a_{i+1}\oplus a_j\ge k_2\),继承所有 \(f_{i,j,0}\)。

注意到 \(i\) 在扫描线过程中可以略去,将 \(f_{j,0/1}\) 分别放在两棵字典树上,下标放在 \(a_j\) 上,模拟所有合法的 \(j\) 的求和过程即可。

32. P9200

主动弱化限制条件。直接上手做不了一点。

考虑确定下来 \(n+1\) 插入到哪里怎么做,显然有 \(n\) 种选择(插入到 \(i=1,2,\cdots,n\) 的后面)

记录此时的长度为 \(n+1\) 的数列 \(e_i\) 的前缀和为 \(pre_i\)。

对于一个起点 \(i\),移动到 \(j\) 的电荷量,考虑断环成链,将数列 \(e_i\) 复制一份到后面,如果有 \(i\le j\),那么有到达 \(j\) 的电荷量为 \(pre_j-pre_{i-1}\),意义是求出区间和。否则,对于 \(i>j\) 的情况,有到达 \(j\) 的电荷量为 \(pre_{j+n+1}-pre_{i-1}\),也就是环上的区间和。

注意到 \(\sum e_i=0\),即 \(pre_{n+1}\) 恒等于 \(0\),显然有 \(pre_{j+n+1}=pre_{j}\),那么到达 \(j\) 的电荷量就等于 \(pre_{j}-pre_{i-1}\),与 \(i\leq j\) 没有任何区别,因此可以不考虑位置关系。

考虑记 \(f(x,i)=\sum_{j=1}^{n+1}|pre_j-pre_{i-1}|\times c_j\)。\(x\) 是枚举 \(n+1\) 的插入的位置是 \((x,x+1)\) 之间(对于 \(x=n\) 是 \((n,1)\) 之间),\(i\) 是枚举粒子环游的起点,有 \(1\leq x\leq n,1\leq i\leq n+1\)。\(x\) 是我们最开始就在枚举的东西,考虑从 \(i\) 入手做。

因为 \(pre_{n+1}=pre_0=0\),所以,对全体的 \(i\in [0,n]\) 扫一遍取 \(\min\) 就等价于对 \(i\in[1,n+1]\) 扫一遍。式子可以改写为 \(f(x,i)=\sum_{j=1}^{n+1}|pre_j-pre_i|\times c_i\)。

考虑 \(i\) 取在什么时可以取到 \(\min\)。这显然是一个带权中位数的形式。就是考虑,有一个 \(\sum c_i\) 个数的序列,对于每个 \(j\),在这个序列中有 \(c_j\) 个 \(pre_j\)。对这个排序之后,中位数的值就是我们想要的 \(i\)。证明的话,调整法或者交换法随便证下就好了。

注意到这个形式不要求对 \((pre_i,c_i)\) 具体的下标做出要求,考虑以 \(pre_i\) 为值域的下标进行维护。

注意到 \(\sum c_i\) 是定值,那么找出来的中位数 \(x\) 就是满足,下标 \(\leq x\)(也就是所有 \(pre_j\leq x\) 的 \(j\)),对于 \(c_i\) 前缀和第一个 \(\ge \lceil \dfrac{\sum_{i=1}^{n+1} c_i}{2}\rceil\) 的 \(x\)。因为前缀和会变,考虑用权值线段树维护,下标为 \(pre_{i}\),存的值为 \(c_i\),直接在线段树二分就可以处理。

现在考虑移动 \(n+1\) 插入的位置。
考虑操作的序列,现在 \(n+1\) 在整个序列第 \(i\) 个,移动到第 \(i-1\) 个。

注意到每次只会影响前一个位置的前缀和值,直接模拟即可。具体的,考虑初始状态是放在 \(n\) 之后,也就是
\(\lbrace1,2,\cdots,n,n+1\rbrace\),然后把 \(n+1\) 逐个往前移动。

每次移动形如将:

\(\lbrace1,2,\cdots,i-2,i-1,n+1,i,i+1,\cdots,n\rbrace\)

更改为:

\(\lbrace1,2,\cdots,i-2,n+1,i-1,i,i+1,\cdots,n\rbrace\)

直接对这两个位置进行修改即可。

因为直接在数据结构上二分,所以时间复杂度 \(O(n\log n)\)。

33. LOJ4040

一眼出了特殊性质 B 的做法。考虑 \(R=n\) 的部分分,显然只需要考虑对于剩下未确定的,(左部图)行往(右部图)值连边。然后找出 \((n-C)\) 组二分图完美匹配即可。断言一定有解。

二分图两侧均有 \(n\) 个点,每个点度数为 \(k\),为正则二分图。由 Hall 定理每次都有完美匹配。

考虑 \(R\ne n\),想了半天。结果是把右上角补了,然后再跑性质 B,注意若存在某个数的出现次数 \(>n-R\) 就是无解。此时是(左部图)列往(右部图)值连边。

直接跑若干轮完美匹配显然会似,无论是匈牙利还是 dinic,考虑换一种描述:二分图的边染色,使得任意两条相邻(有公共顶点)的边颜色不同。

怎么做呢?考虑添加一条边 \((u,v)\),与 \(u\) 相邻的边颜色集合为 \(S_u\),同理有 \(S_v\),强制将 \(col_{u,v}\) 染成 \(\text{mex}(S_u)\),然后循环找冲突,这个过程是链,由二分图的性质是有解的。

时间复杂度从 \(O(Tn^3\sqrt n)\) 变成了 \(O(Tn^2)\)。

34. LOJ4122

对 \(R\) 状压,考虑最后的机器人的相对关系,容易想到 dp 的一个维度必然是 \(f_S\) 表示集合 \(S\) 中的已经染色的最小时间。机器人一直在动,很难保持相对关系。考虑给所有东西扔一个顺时针 \(\dfrac{1}{k}\) 单位每秒的速度,然后机器人就不动了。人的顺逆速度会有两种,激活点也只以这个速度在转。

回到那个 dp,容易发现还需要扔一个 \(f_{S,i}\) 表示 \(i\in S\) 是最后一个染色的,然后就枚举 \(j\not\in S\) 进行转移。注意到每次转移的形式是,先求出来 当前时间 + 人的时间,然后再等激活点转过来。人走过来的时间小一定不劣,所以可以先求 当前时间 + 人的时间 的 \(\min\),访问那个 dp 值向外转移时再去更新激活点转过来的时间,可以二分找。

时间复杂度 \(O(R^22^R+R2^R\log n)\),不知道为啥过去了。

35. LOJ4121

显然就是只考虑差值 \(x\),若 \(x\leq 0,x\to x+v\),否则 \(x\to x-v\)。

注意到真正有用的值域只有 \(O(a_1)\),我们只关心 \(x\) 在一定值域内的变化。考虑从左到右扫描线。当前考虑的区间是 \([-x,x)\)(容易发现左右的限制的绝对值都是相等的)

一次变换过后,\([-x,0]\to [-x+v,v]\),\((0,x)\to (-v,x-v)\),然后有用的区间就是这俩东西取并集,注意到 \(v\) 递减,这个东西只会越变越小。考虑中间的交集 \((-v,v]\) 是干啥的,容易发现就是将两个变换前的数,让他们在这次变换后的值是相等的,暴力将重合的位置的并查集合并。这个东西可以并查集套 treap 维护。

然后把交集的区间只保留一个,treap 维护分裂合并就行,复杂度 \(O(n\log n)\)。

36. LOJ3481

CF1864F。

每种颜色每个位置可以少一次操作当且仅当两个相邻位置中间的 \(\min\) 大于他们。随便扫描线加树状数组维护下就过了。

37. 「联合省选 2023」过河卒

注意到 \(n,m\leq 10\),考虑将三个棋子的位置关系以及先后手直接设为状态。即考虑有向图,点 \(((a,b),(c,d),(e,f)),0/1\) 代表红棋子 \(1\) 的坐标为 \((a,b)\),红棋子 \(2\) 的坐标为 \((c,d)\),黑棋子为 \((e,f)\),当前是 红方/黑方 作为先手。

注意:状态合法要求红棋子不重合。

考虑将问题抽象成:对于一张有向图,初始位于状态 \(s\),每次可以向点的后继移动一步,不能移动者输。

可以先把图建出来,这个可以用 BFS,建出来一张大小为 \(2(nm)^3\) 的有向图。

那么我们需要最先判断的事情是,谁是 winner。因此考虑对每个点设上 \(N/P/T\) 态表示 必败点 / 必胜点 / 平局点,然后将第二属性设为 \(\text{dist}\) 表示达到必胜策略的最优步数。

注意到无出度的状态是 \(N\) 态。考虑:

  • 若后继存在 \(N\) 态,则该点为 \(P\) 态。
  • 若后继全部为 \(P\) 态,则该点为 \(N\) 态。
  • 否则该点为 \(T\) 态。

考虑用另外一个 BFS 来求 \(\text{dist}\)。注意到终态的 \(N/P/T\) 态已知,均为 \(N\),所以可以从终止状态倒序转移,直接建立反图。

考虑,对于一个点 \(u\),如果出现在队列中,代表它的 \(N/P/T\) 以及 \(\text{dist}\) 已经完全确定。注意到 \(T\) 态没有太大存在的必要,因此考虑队列只加入 \(N/P\) 态的点。

将上述讨论的分讨改到反图上,就是向后转移。考虑队列中的点 \(u\) 向 \(v\) 转移:

  • 若 \(u\) 为 \(P\) 态,则 \(v\) 可能为 \(N\) 态,此时 \(v\) 的后继都被加入过队列时,那么 \(v\) 就确定是 \(N\) 态,同时更新 \(\text{dist}\) 即可。
  • 我们限定队列中的点只能是 \(N/P\) 态,因此 \(u\) 在剩余情况只会是 \(N\) 态,向后继转移时,若 \(v\) 的 \(N/P\) 态未完全确定,那么可以直接确定 \(v\) 是 \(P\) 态,若未加入队列,加入队列;并且更新 \(\text{dist}\)。

不知道为什么洛谷 \(\text{TLE}\) 了一个点。

标签:pre,二分,Set,text,Solution,leq,集合,考虑
From: https://www.cnblogs.com/nullptr-qwq/p/18236462

相关文章

  • Solution Set #2
    发电语录,被班主任注意到,并被公示到\(\text{whk}\)家长群了。发电语录,被班主任注意到,并被公示到\(\text{whk}\)家长群了。发电语录,被班主任注意到,并被公示到\(\text{whk}\)家长群了。20.「NOI2022」冒泡排序离散化掉\(V_i\)显然没有影响。基础性质:若\(i<j\)且\(a_......
  • Solution Set #1
    最近不想写题。1.P8456简单题。显然要容斥计算同色路径的个数。无向图路径问题,考虑把边双缩点,建立圆方树。不难想到对每个方点分类:全D,全d,有D有d。并查集维护每个全D,全d极大连通块的大小即可。这样会算多。考虑\(x-y,y-z\)为D,\(z-x\)为d的三元环,这会形成异色方......
  • Solution Set #4
    搬了以前的博客。大概都是\(2023\)年做的。38.P5369状压最大前缀和的集合。dp算一下符合条件的集合,要求任意后缀和\(\ge0\),枚举结尾元素转移即可。后面的就是任意前缀和\(<0\)。39.「联合省选2021A|B」图函数\(f(u,G)\)含义,有多少\(v\)满足存在\(u\rightarrow......
  • Solution Set #5
    开始补\(3\)月的做题。102.P7417由于\(f_G(a,b)\)可以走重边,所以我们只关心奇最短路以及偶最短路。判掉一下每个点只有奇数路径或偶数路径,即二分图,可以直接最短路树,在两题都需要特判掉。本题的重点在于确认\(G'\)的结构。考虑\((x_i,y_i)\)为不同奇偶的最短路数对,要......
  • CF1913C Game with Multiset
    题目Inthisproblem,youareinitiallygivenanemptymultiset.Youhavetoprocesstwotypesofqueries:ADD\(x\)—addanelementequalto\(2^{x}\)tothemultiset;GET\(w\)—saywhetheritispossibletotakethesumofsomesubsetofthecur......
  • 报错 urllib3 (1.26.7) or chardet (5.2.0)/charset_normalizer (2.0.8) doesn‘t mat
    报错RequestsDependencyWarning:urllib3(1.26.7)orchardet(5.2.0)/charset_normalizer(2.0.8)doesn'tmatchasupportedversion!warnings.warn("urllib3({})orchardet({})/charset_normalizer({})doesn'tmatchasupported"这个警告信息Req......
  • memset函数
    转载:https://www.cnblogs.com/-wenli/p/11491127.htmlC语言memset函数详解memset()的作用:在一段内存块中填充某个给定的值,通常用于数组初始化与数组清零。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为:#include<string.h>void*memset(void*s,intc......
  • goto 语句以及 setjump、longjump 函数的注意事项总结
    关于goto、setjmp、longjmp的注意事项,总结如下:goto语句避免滥用:goto语句虽然能够提供一种直接的跳转方式,但过度使用会使程序结构变得复杂,难以阅读和维护。应优先考虑使用结构化的控制流语句(如if、while、for等)。防止死循环:在使用goto语句时,要特别注意不要形成死......
  • 靶机练习:sunset: midnight
    信息收集扫全端口和服务80端口直接访问访问不了:/wp-adminhttp://sunset-midnight看到域名先进行域名绑定,编辑/etc/hostsipsunset-midnight绑定后可正常访问,访问robots.txt文件访问/wp-admin,存在wordpress服务使用wpscan扫描地址[+]WordPressversion5.4.......
  • network xxx was found but has incorrect label com.docker.compose.network set to
    在执行docker-composedown之后,再执行docker-composeup-d提示已有同名称标签的虚拟网卡  解决1、执行dockernetworkls命令展示所有的虚拟network2、执行dockernetworkrm<networkId>删除已存在的network3、再重新运行docker-composeup-d启动容器  扩......