首页 > 其他分享 >题解:CF1954F Unique Strings

题解:CF1954F Unique Strings

时间:2024-05-16 22:07:39浏览次数:24  
标签:同构 frac 题解 sum 我们 循环 Unique Strings dp

link

计数类 *3100 首次独立过纪念版题解。

首先我们考虑一个去重的问题。貌似针对循环同构去重的问题,只能从循环节上入手。

那么我们考虑设 \(dp(d)\) 为 最小循环节长度恰好为 \(d\) 不同方案数个数,则答案为:

\[\sum_{d=1}^ndp(d)=\sum_{d|n}\frac{dp(d)}{d} \]

这似乎是一条可行的路。但我们发现确定最小循环节长度是一个较为困难的问题,反而确定存在一个长度为 \(d\) 的循环节(直接固定,类似于二项式反演的思想)更为容易。

所以不妨有设 \(g(d)\) 为存在长度为 \(d\) 的循环节的方案数,则容易有 \(g(n)=\sum_{d|n}dp(d)\),因此由莫比乌斯反演我们知道 \(dp(n)=\sum_{d|n}\mu(\frac{n}{d})g(d)\)。

好了现在让我们来想想 \(g\) 的求法。

一个困扰我们的问题是原问题摆在了环上,但幸好我们可以将原题意转化为求解有多少个环状二进制串,满足 \(cnt_1\in[c,c+k]\),存在一个全是一的连续段长度大于等于 \(c\)。

如果说去掉环的限制显然是一个很 naive 的 DP 题,而环的限制本质上还是对同构提出了要求。

我们考虑字符串 \(S\) 的循环同构串数量,不妨设 \(S_i\) 为 \(S\) 从 \(i\) 位置开始的循环串。则显然有设 \(x\) 为 \(S\) 的最小循环节长度,有 \(S_i=S_{i+x}\),且 \(S_1\sim S_x\) 互不相同。

这告诉我们 \(g(d)\) 其实也就是只需要考虑填这个串的 \([1,d]\) 位即可,剩下的就是复制的问题了。

好了,现在我们可以考虑怎么去掉个数限制了。

为了方便统计,我们就强行要求 \(S[1]=0\) 吧。我们不妨设 \(f_{i,j,0/1}\) 为在 \([1,i]\) 中填写 \(j\) 个零,且最后一个零是 \(i\),当前是否已经填过长度大于等于 \(c\) 的一连续段。

则对于 \(S_1\sim S_d\) 两两不同的限制就太简单了,这意味着只考虑 \(S[1,d]\),将其作为一个循环串,每个位置开头都不一样,这告诉我们如果我们将强制 \(S[1]=0\),则对于任意一个使用了 \(t\) 个零的合法串,都恰有 \(t-1\) 个与它同构,这告诉我们 \(\frac{f_{i,j,0/1}}{j}\) 就是填完 \(S[1,i]\),然后 \([i+1,d]\) 全部写 \(1\),所产生的贡献。

首先我们进行 \(O(n^2)\) 的动态规划求出 \(f\)。

就有 \(f_{i,j,t}\to f_{i+x+1,j,t|[x\ge c]}\),初始 \(f_{1,1,0}=1\)。

这个转移显然可以使用差分进行优化。

接着我们有 \(s_{i,j,t}=\sum_{x\le j}\frac{f_{i,x,t}}{x}\)。

然后我们就可以考虑着手求出 \(g\) 了。

对于 \(g_d\),由于它要复制 \(\frac{n}{d}\) 次,我们可以求出其能够填写的零的个数的范围 \([l,r]\),同时枚举最后一个零的位置 \(i\in[1,d]\),注意到 \([i+1,d]\) 全部写一,利用 \(s\) 进行统计即可。

但是我们需要注意到可能会出现类似于统计 \(g(6)\),对于串 011011 这种答案。

我们发现这个串是应该属于 \(dp(3)\)。在这里还多除以了一个 \(2\),因此这提示我们可能需要更改一下朴素的莫比乌斯容斥系数。

一个很简便的方法是:将所有的 \(d\) 直接化为 \(n\),也即直接乘上 \(\frac{d}{n}\),这样就去除了这种多除的问题。然后最后算答案的时候 \(dp(d)\) 再乘上 \(\frac{n}{d}\) 即可。

复杂度 \(O(n^2+d^2(n)+\sum_{d|n}d)=O(n^2)\)

标签:同构,frac,题解,sum,我们,循环,Unique,Strings,dp
From: https://www.cnblogs.com/spdarkle/p/18196847

相关文章

  • 2024 jscpc B题 Area of the Devil 题解
    题目链接:AreaoftheDevil算不在题目说的区域内的面积,直接算是比较麻烦的,这里给一个朋友直接算画的图,其实画出区域以后也算好算,当然官解提到的容斥去算更好写。一共有五个空余的区域,我们考虑这五个区域怎么计算,图一是直接画出的所有区域的并集,图二则是五角星处于边界情况时,图......
  • [ARC149D] 的题解
    思路很巧妙,首先,很明显,数轴上关于原点对称的一个点对,不论移动了多少次,都任然是对称的。再看眼数据范围,发现其实点分布的比较紧,考虑直接将所有点看做一个整体(数轴上一个线段),然后依次移动。关键的是,若这个整体横跨了原点的话,那么在原点的点就有答案了,对于剩下的部分,设在正半轴、负......
  • Codeforces 1004B Sonya and Exhibition 题解
    题目简述让你构造一个长度为$n$的$01$字符串。一个区间的价值为其中$0$的数量乘以$1$的数量,给出$m$个区间,最大化它们的价值之和。题目分析设区间$[l,r]$中$1$有$x$个,$0$有$y$个,当$x$和$y$最接近的时候,$x\timesy$最大,此结论可以用二次函数进行证明。......
  • AT_arc042_c的题解
    (一)非常妙的DP题,可惜被翻译毁了。题意:你有一堆零食,每个零食有两个值\(a_i\)和\(b_i\)。要求选出集合\(S\),使\(\sum_{i\inS}a_i-\min_{i\inS}a_i\lep\),求最大的\(\sum_{i\inS}b_i\)。一眼DP。先将\(a_i\)从小到大排序,每次循环更新\(dp_0\)的值为\(\max......
  • P10447 最短 Hamilton 路径 题解
    P10447最短Hamilton路径题解题目传送门题意:给定一张有向带权图(\(n\le20\))求点\(0\)到点\(n-1\)的最短哈密顿路径。这是一道状压DP模板题。在状态压缩DP中,我们将一个集合压成一个二进制数。设\(f_{u,i}\)为已经走了集合\(u\)中的节点,且现在在点\(i\)的最短......
  • CF1886E 题解
    CF1886E思路观察发现每个项目只与程序员数量和最小值有关,所以每个项目对应能力值连续的程序员最优。项目数\(m\le20\),状压。设\(dp_{i,s}\)为前\(i\)个程序员匹配的项目状态为\(s\)是否可行,无法接受。交换维度,改为\(dp_s\)表示状态\(s\)能与前缀\([1,i]\)匹配的......
  • 旅行 题解
    题目链接。题意简述给定一张有向图,求从点\(A\)走到点\(B\)的一条路径,这条路径满足:经过的边的权值总和是\(P\)的倍数。在满足条件\(1\)的情况下,经过的边的权值总和最小。题目分析本题可以使用分层图最短路来解决。仿照动态规划的思想,定义\(f_{x,y}\)表示从节点......
  • echarts图由于容器隐藏导致图表不显示问题解决办法
    开发过程中常常会遇到echarts图由于容器隐藏导致图表不显示问题,最简单的办法就是给容器元素加上宽度和高度容器加上固定的宽度和高度<divid="res"style="height:450px;width:1200px"></div>然而在实际开发中某些场景下,要求图表宽度100%显示,而计算容器的宽度有时又会十分的麻......
  • CF1965D Missing Subarray Sum题解
    题目链接点击打开链接题目解法感觉一点都不好想\fn因为最后的序列\(a\)是回文的,所以只有以中心点对称的子段和出现次数为奇数,其他都为偶数考虑有没有什么知道所有子段和的做法,可以方便推出缺失一个的答案令\(g_{l,r}\)为\(l\)到\(r\)的子段和知道\(g_{1,n}\)删......
  • P9175 [COCI2022-2023#4] Mreža 题解
    P9175[COCI2022-2023#4]Mreža题解前言我发现,有整体二分与主席树的地方总有莫队(不是那个莫队,是那个莫队)。知识点(树上)倍增,(树上)莫队,树状数组(“树”含量满满),分块。题意分析给定一棵树,每条边有一个权值\(v\),以及可以用一个花费\(c\)将它变成更大的权值\(s\)。再给定一......