首页 > 其他分享 >[ARC159F] Good Division

[ARC159F] Good Division

时间:2024-05-05 23:33:05浏览次数:26  
标签:Division Good text 众数 绝对 mid ARC159F 2C 序列

题意

给定一个长度为 \(2 \times n\) 的数列 \(S\)。

称一个数列是好的,当且仅当数列中的数可以由每次删除相邻两个 不同 的数的操作删空。

求划分该数列为若干好的字串的方案数。

Sol

集中注意力。

首先显然长度为奇数的序列是没法做的。

若序列存在绝对众数,则该序列一定无法删除,否则该序列一定能被删空

证明:若序列不存在绝对众数,显然每次一定能找到两个相邻不相同的数进行操作,所以一定能操作完。

考虑一个简单的 \(\text{dp}\)。

设 \(pos_{l, r} \in [0, 1]\) 表示区间 \([l, r]\) 是否存在绝对众数。

\[f_i = \sum_{j = 0} ^ {i - 2} [i - j \mod 2][pos_{j + 1, i}]f_j \\ \]

显然该 \(\text{dp}\) 的复杂度为 \(O(n ^ 2)\)。

考虑使用 \(\text{CDQ}\) 分治优化。

注意到对于大多数情况,左边所有的状态都能直接转移到右边。

考虑先将左边求和,先转移,然后再减去绝对众数产生的贡献。

若一个序列有绝对众数,则它任意分成两段,至少有一段存在绝对众数

我们可以考虑分别处理出 \(\text{mid}\) 左边与右边的绝对众数。

显然能够成为绝对众数的数的个数不会超过 \(\log n\)。

考虑 \(s_p\) 能成为绝对众数的约束,设 \(i, j\) 为当前选择区间的左右端点,显然 \(i \le mid\),且 \(j > mid\)。设 \(C_i, C_j\) 分别表示 \(mid\) 左边与右边,和 \(s_p\) 相同的数的个数。

由绝对众数的定义得:

\[(i - j + 1) < (C_i + C_j) \times 2 \]

考虑化简:

\[i - j + 1 < 2C_i + 2C_j \]

将含 \(i\) 的扔到一边,含 \(j\) 的扔到另一边:

\[i - 2C_i + 1 < j + 2C_j \]

注意到该式子左右只和 \(i, j\) 分别有关。

考虑对于所有的 \(i\) 预处理 \(i - 2C_i + 1\),放进一个桶里,求后缀和。

然后对于所有的 \(j\) 直接计算答案的贡献就完事了!

复杂度:\(O(n \log ^ 2 n)\)。

标签:Division,Good,text,众数,绝对,mid,ARC159F,2C,序列
From: https://www.cnblogs.com/cxqghzj/p/18174087

相关文章

  • 20240504 —— Goodbye 2024(1/3).
    很久没有用心写过随笔了。写随笔对我来说是个很困难的事情,因为我文笔烂完了。每次都是写前觉得有一堆东西可以写,写的时候就不知道咋连结在一起,最后乱写了一堆发出来。2024/5/422:39看了会物理书后累了打了会块(TETR.IO),3:5,DEFEAT。怎么回事呢。打完前两局感觉对手硬实力不是......
  • G1. Division + LCP (easy version)
    原题链接题解1.二分查找前缀出现次数,用\(kmp\)优化查找算法code#include<bits/stdc++.h>usingnamespacestd;chars[200005];intpre[200005]={0},occ[200005]={0};intn,x;intsolve(intlen){intcnt=1;intit=0;for(intj=len+1;j<=n;j++){......
  • G2. Division + LCP (hard version)
    G2.Division+LCP(hardversion)Thisisthehardversionoftheproblem.Inthisversion$l\ler$.Youaregivenastring$s$.Forafixed$k$,consideradivisionof$s$intoexactly$k$continuoussubstrings$w_1,\dots,w_k$.Let$f_k$bethemaximal......
  • MIGO BAPI BAPI_GOODSMVT_CREATE 各种类型使用汇总
    ***********GOODSMVT_CODE取值含义********01MB01*02MB31*03MB1A"发*04MB1B"转储*05MB1C"其它收货*06MB11*07MB04经常会遇到一些自定义的移动类型,但是并不知道对应的goodsmvt_code是多少。可以用如下方法进行查找首先去T158B中根据移动类......
  • good-turning算法
    解答:合并验证集与训练集,计算合并之和的数据集在训练集中出现的次数:张三喜欢外出旅行李四登山王五不喜欢12211100那么:r012N(r)242根据公式计算可以得到:r*r(0)=2r(1)=1r(2)=2N(r*)242(最高次数的N(r*)不变的)那么......
  • Redis Sentinel 哨兵模式 故障转移失败 -failover-abort-no-good-slave master mymast
    根据网上的解决方案:1.我核对了sentinel.config和redis.configbind绑定的端口。2.三台redismasterauth都设置了密码3.sentinel.config的sentinelmonitormymaster和sentinelauth-passmymaster也没有错。但在我测试主从复制的时候,发现主从主机无法相连,我在网上找的解决......
  • 定义类强化——定义Goods类表示商品
    现需要编写一个计算商品总价值的程序,现要求:1、定义一个表示商品的类:Goods,Goods类要包含:一个私有成员变量Stringname表示商品的名称;一个私有成员变量floatprice表示商品的价格,并定义setPrice(floatprice)方法用于修改商品价格;一个私有成员变量intcount表示商品的数量,并定......
  • RGI 德国Real Good Idea 流量计 Flocon21
    ProductspecificationEvaluationunitforflowmeasurementsystembasedonmicrowaves DescriptionThe evaluationcomputerFLOCON21forms,togetherwithoneofthesensorsDR-xxx,acontactlessflowmeasurementsystemformanyapplicationsinthe......
  • AT_abc328_f [ABC328F] Good Set Query 题解
    分析考虑并查集。对于\(a_i,b_i,d_i\),若\(a_i,b_i\)在之前的满足要求的操作中,\(a_i,b_i\)不在同一个集合里,则在之前\(X_{a_i},X_{b_i}\)的相对差值是可以任意改变的。令\(k=X_{a_i}-X_{b_i}\),则我们需要将\(a_i\)所在集合中所有元素的值增加\(d_i-k\)。然后将\(a_i,b......
  • CF1925D Good Trip 题解
    Solution不好做的地方在于每一对朋友的友谊值是不同的,于是考虑将其统一为一个数。比较好想的就是将他们的初始友谊值提前计算,即对于每一次远足,设总情况为\(S=\frac{n\times(n-1)}{2}\),总的初始友谊值为\(w=\sum_{i=1}^{m}f_i\),假设友谊值不变,获得的期望友谊值为\(\frac{w}{......