?

news/2024/12/29 9:03:08/文章来源:https://www.cnblogs.com/wangwenhan/p/18390678

CF1194G

在外层枚举\(x'\)\(y'\),令\(x=x'\times t,y=y'\times t\),且\(x'\times t\)十进制包含\(x'\)\(y'\)同理。

因为有进位,从低位向高位dp。

\(f[T][0/1][0/1][i][j][0/1][0/1]\)表示处理到第T位,在当前这些为中\(x'\times t\)是否大于\(n\),\(y'\times t\)是否大于\(n\),\(x'\times t\)进位为\(i\),\(y'\times t\)进位为\(j\),其中\(i,j<=8\)\(x'\times t\)是否存在\(x'\)这个数码,\(y'\times t\)是否存在\(y'\)这个数码。

转移是简单的,但是会算重。

例如\(\frac{14}{28}\)就会被\(\frac{1}{2}\)\(\frac{4}{8}\)同时贡献到。

也就是\(\frac{x0'}{y0'}=\frac{x1'}{y1'}\)时会算重。

在外层枚举最简分数\(\frac{x''}{y''}\),然后枚举\(\frac{x''}{y''}=\frac{x'}{y'}\),只要\(x''\times t\)包含任意一个\(x'\)这个数码,同时\(y''\times t\)包含这个\(y'\)数码,那么我们直接加两维,设\(k\)为满足\(\frac{x''}{y''}=\frac{x'}{y'}\)\((x',y')\)数量,新加的两维每维大小为\(2^k\),判掉\(x''=1,y''=1\)以后\(k\)最大为\(4\)

状态数为\(n\times 2^2 \times 9^2 \times 2^{2k}\),但是过不了。

我们发现若\(\frac{x}{y}\)合法,则\(\frac{y}{x}\)合法,可以枚举外层时令\(x''<y''\),常数小一半,然后我们发现若\(x''\times t\)超过了\(n\),那么\(y''\times t\)一定也超过了\(n\),所以前者毫无意义,所以又可以少一半常数。

然后我们又发现,\(k\)在很大一部分的情况下是很小的,\((x'',y'')\)只有\(27\)对,但是\((x',y')\)只有\(45\)对,这里可以优化常数。

然后我们又又又发现,我们只关心存不存在\(x''\times t\)包含任意一个\(x'\)这个数码,同时\(y''\times t\)包含这个\(y'\)数码,对于每一个\((x',y')\),记录\(0/1/2\)表示,都两个条件都不满足,只满足\(x'\)的条件和只满足\(y'\)的条件,如果当前两个条件都满足了就没必要记录这个东西了。

这样\(2^{2k}\)就变成了\(3^k\),常数更进一步。

UOJ888. 【UNR #8】里外一致

设c[i]为第i种颜色的出现次数

考虑设f[i][j]为考虑前i种颜色,里外颜色之差为j,不难转移,时间复杂度\(O(n^2)\)

考虑改一下定义,设f[i][j]为考虑前i种颜色,有j个只在里侧或只在外侧,有:
\(f[t][i]\rightarrow f[t+1][i]\),系数为\(2^{c_{t+1}}-2\)

\(f[t][i]\rightarrow f[t+1][i+1]\),系数为\(1\)

最后答案为\(\sum_{k=0}C(k,k/2)f_{n,k} [k \bmod 2=0]\)

注意到第一种转移最多64次,因为系数有因数2,超过64次在对\(2^{64}\)取模意义下为0。

考虑换一下定义,j改为有j个里外侧都有,那么转移如下:

\(f[t][i]\rightarrow f[t+1][i+1]\),系数为\(2^{c_{t+1}}-2\)

\(f[t][i]\rightarrow f[t+1][i]\),系数为\(1\)

计算答案:
image

现在\(i\)的范围在为\(i<=64\),单次时间复杂度为\(O(64n)\)

考虑把出现次数一样的颜色一起处理。

我们令\(z[i]\)表示\([l,r]\)内出现了\(i\)次的颜色有\(g[i]\)种。

考虑处理所有出现次数为d的颜色。

\(f[d-1][i]\)表示考虑了出现次数不超过\(d-1\)的颜色,有i种在两侧都有,转移方程为:

\(f[d-1][i]\rightarrow f[d][i+k]\),系数为\(C(z_d,k)(2^d-2)^k\)

考虑到\(i\)\(k\)的大小都不超过\(64\),单次时间复杂度为\(O(n+n\times 64^2)\),但真的是这样吗?

我们发现最多有\(\sqrt n\)\(d\)使得\(z_d!=0\),所以单次时间复杂度其实是\(O(n+\sqrt n \times 64^2)\)

我们考虑上一个莫队,再来一个数据结构(set或zkw线段树)找到每一个不为\(0\)\(c_i\),可以以总时间复杂度\(O(n log n\sqrt n)\)内计算出\(c_i\)\(z_d\)

总时间复杂度为\(O(n log n\sqrt n + m(\sqrt n \times 64^2))\),考虑优化右侧\(dp\)的那一部分。

我们观察模数为\(2^{64}\)能不能再次帮助我们优化时间复杂度,把转移系数拿出来:\(C(z_d,k)(2^d-2)^k\),观察\((2^d-2)\),发现若\(d>64\)就变成了\(-2\),而且前面莫队那里不用数据结构了,总时间复杂度为\(O(n\sqrt n+m64^3)\)

考虑使用一点几何意义,2的因子越多我们的算法越优。

观察\((2^d-2)^k\),假定没有这个\(-2\),就变成了\((2^d)^k\),这时要满足\(i+c\times k<=64\),也就是时间复杂度是这样的形式:

$\sum_{c=1}^{64} \sum_{i=1}^n \left \lfloor \frac{64-i}{c} \right \rfloor $

但是还有一个\(-2\)没有还回来,于是我们枚举一个i,令g为原来的f,f为不考虑-2算出的结果。

\(f[cnt][i]\rightarrow g[cnt][i+j]\)系数为\(C(cnt-i,j)\)

计算出g,这题就做完啦。

总时间复杂度为\(O(n\sqrt n+m64^2)\)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/799562.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络补充

1. 网卡配置(ip,dns)目标:修改网卡的名字为eth0. 修改网卡配置文件,ip,dns,网关,子网掩码.(物理机,虚拟机(私有云)) 公有云自动获取即可,服务器数量巨大自动获取.1.1 网卡命名 结论: 工作有需求的时候再去修改. 做好记录,后面使用的时候参考即可. # 网卡命名规则: ens33 ensxxx…

在idea中使用mysql失败

在idea中测试mysql显示失败idea方面视图 - 工具窗口 - 数据库 或者右边有图标直接点开新建 - 数据源 - mysql名称 - 用户(root) - 密码 - 测试连接如果测试连接有切换相关提示直接点击, 如果出绿色对勾就成功了 到这里本可以结束了, 但是我最开始做的时候这个流程没有成功 以防…

Pyhton调用R语言rpy2包概要

随着深度学习、大数据和AI的发展,Python的热度持续上升,引发了关于选择Python还是R的讨论。作为数据分析工具,两者各有优缺点。在特定领域,如生态学,R仍被广泛应用,而Python则更多用于日常办公自动化,如批量处理文档和Excel。由于数据处理占用了我们大量时间,很多人希望…

自动驾驶运动规划学习_碰撞检测算法_GJK

自动驾驶运动规划学习:碰撞检测算法:GJK Gilbert–Johnson–Keerthi(GJK)算法,是一种用于检测两个凸集是否重叠的高效算法,并且可以得到两个凸集的最小距离.1.4.1 GJK算法原理1.4.1.1 闵可夫斯基差(Minkowski Difference)1.4.1.3 凸性 在二维空间中,如果一个凸集包含原点,…

设计模式之——代理模式

代理模式 前言: 我们一般在租房子时会去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做;再比如我们打官司需要请律师,因为律师在法律方面有专长,可以替我们进行操作,表达我们的想法;再比如在淘宝上面买东西,你使用支付宝平台…

一文搞定WeakHashMap

写在前面 在缓存场景下,由于内存是有限的,不能缓存所有对象,因此就需要一定的删除机制,淘汰掉一些对象。这个时候可能很快就想到了各种Cache数据过期策略,目前也有一些优秀的包提供了功能丰富的Cache,比如Google的Guava Cache,它支持数据定期过期、LRU、LFU等策略,但它…

P2710 数列/P2042 [NOI2005] 维护数列

题意(以 P2710 为例)思路 使用 FHQ-Treap 进行求解,清晰明了。对于 insert,先将要插入的数建成一棵树,然后将这棵树放入 FHQ-Treap 中。 对于 delete,将要删除的树分离出来,然后把剩下的部分合并即可,将删除的树的树根丢到废弃节点的栈中以备以后使用(节约空间,不然 …

扩展分析C语言单双引号、反斜杠与注释

目录注释奇怪的注释C风格的注释无法嵌套一些特殊的注释注释的规则建议反斜杠\反斜杠有续行的作用,但要注意续行后不能添加空格回车也能起到换行的作用,那续行符的意义在哪?反斜杠的转义功能单引号和双引号字面值,字符串,字符,字符变量的大小为什么sizeof(1)的大小是4 ?char…

扩展分析单双引号、反斜杠与注释

目录注释奇怪的注释C风格的注释无法嵌套一些特殊的注释注释的规则建议反斜杠\反斜杠有续行的作用,但要注意续行后不能添加空格回车也能起到换行的作用,那续行符的意义在哪?反斜杠的转义功能单引号和双引号字面值,字符串,字符,字符变量的大小为什么sizeof(1)的大小是4 ?char…

C----函数递归之反汇编

环境 win10 vc6.0 debug 代码 关于求阶层问题:n!=n(n-1)!;(n-1)! = (n-1)(n-2)! 例如5!=5(4)! 4!=43! 3!=32! 2!=21 函数递归的出口是1,所以函数递归最重要的条件是去寻找递归的出口 int fun(int i) {int sum = 0;if (i == 1){return 1;}else{sum = i*fun(i-1);}return sum …

地平线占用预测 FlashOcc 参考算法-V1.0

1.简介 3D Occupancy Networks 的基本思路是将三维空间划分成体素网格,并对每个网格进行各类感知任务的预测。目前以网格为中心的方法能够预测每个网格单元的占用率、语义类别、未来运动位移和实例信息。3D occupancy 可以对道路障碍物进行更细粒度的划分,同时获取更精确的占…

手脱upx

其实已经是大一下刚开始的事情了,补个档 手动脱壳の新年快乐 查壳,有壳,UPXX32dbg打开文件,查看初始断点点击PUSHAD跟进,CTRL+*设置EIP,开始F8步过,寻找ESP寄存器第一次单个变红的地址此时的内存窗口开始步过第一次步过就发现ESP单个变红,右键跟进内存窗口然后在第一个…