| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> [ACNOI2022]我不会GF啊 -> 正文阅读 |
|
[数据结构与算法][ACNOI2022]我不会GF啊 |
题目题目背景 用瓢泼已经不足以形容这雨了;水滴密集到近乎在空中连接成固体,视线无法穿透。 四下都是雨落在地上的敲击声——不,已经是轰鸣声——就像天空要将自己撞入大地那样迅猛。 O n e I n D a r k \sf OneInDark OneInDark 往外望去,也只能看到雨。间杂的电闪雷鸣是唯一的光源。 O n e I n D a r k \sf OneInDark OneInDark 坐在孤零零的帐篷里,在这片平原上显得微不足道。 忽而一声惊雷, O n e I n D a r k \sf OneInDark OneInDark 那因恐惧而闭上的双眼再度睁开时,他看到一个巨大的白色身影,立在帐篷前。雨滴似乎不能侵染它半分。 O n e I n D a r k \sf OneInDark OneInDark 知道那是什么。见过它的人,如果还侥幸活着,无一不陷入癫狂。 O n e I n D a r k \sf OneInDark OneInDark 只来得及写下扭曲的 ? ???? ? u γ ?? ? ?? n ?? ν ???? ? \ell_{\!\!\supset}\frak u\gamma\!\imath\;\frak n\;\nu\!\!\jmath ???uγ?nν?,就已经不省人事。 醒时已破晓。 O n e I n D a r k \sf OneInDark OneInDark 看到了他这辈子永远不会忘记的一幕: 雨,兔子,漂浮的蛋。 这是他的话中唯一能够被辨认出的词汇了。 题目描述 两种选法不同,当且仅当某种数字的被选中次数不同。答案对 ( 1 0 9 + 7 ) (10^9{+}7) (109+7) 取模。 数据范围与提示 思路名兔名言: n n n 越小,题越难。 好吧我摊牌了其实是我太菜了 😢 先放一个基础做法。大数字的比较,容易想到按二进制位 d p \tt dp dp,就像此题。但怎么让数字有序?怎么统计同一种数字的数量? 我好像忘了 n n n 超级小……可以 3 n ? 2 3^{n-2} 3n?2 记录相邻数字的大小关系(大于或等于或小于),然后用类似插头 d p \tt dp dp 的方式转移。 上面的做法没想到,考虑数学转化。告诫:不要用二元生成函数!真的是维度灾难 😭 坚持一元还是不敏感 Burnside \text{Burnside} Burnside 定理啊。正是在选择的元素无序时,它才能派上用场啊。只需给置换设定权值 ω ( g ) \omega(g) ω(g) 使得 ω ( G H ) f ( H ) \omega(G_H)f(H) ω(GH?)f(H) 只在 H H H 不含出现次数超过 k k k 的颜色时 = 1 =1 =1 。 设 G H = ? S i c i G_H=\bigoplus S_i^{c_i} GH?=?Sici??,这里的次方指直积,其中 S i S_i Si? 为 i i i 元对称群。不难发现 f ( H ) = ( n ? 1 c 1 , c 2 , … , c n ? 1 ) f(H)={n-1\choose c_1,c_2,\dots,c_{n-1}} f(H)=(c1?,c2?,…,cn?1?n?1?) 。因此我们需要让 ω ( S i ) = i ! ?? ( i ? k ) \omega(S_i)=i!\;(i\leqslant k) ω(Si?)=i!(i?k) 去抵消系数。 我们不妨猜测
ω
(
g
)
=
∏
ν
(
i
)
c
i
\omega(g)=\prod \nu(i)^{c_i}
ω(g)=∏ν(i)ci? 。不难发现只需满足 其中 为 ( i ? 1 ) ! ?? ν ( i ) (i{-}1)!\;\nu(i) (i?1)!ν(i) 的 E G F \rm EGF EGF 。用多项式 ln ? \ln ln 可求出 F ( x ) F(x) F(x),因此也就得到了 ω ( g ) \omega(g) ω(g) 的表达式。 由 Burnside \text{Burnside} Burnside 定理,转而计算 ∑ ω ( g ) ∣ X g ∣ \sum \omega(g)|X^g| ∑ω(g)∣Xg∣ 。显然 g g g 的循环指标可枚举。现在只需计算不动点权值和。 不动点权值单个数字的选择的
O
G
F
\rm OGF
OGF 为
H
(
x
)
=
1
?
x
α
1
?
x
H(x)=\frac{1-x^\alpha}{1-x}
H(x)=1?x1?xα?,因此循环指标为
∏
x
i
c
i
\prod x_i^{c_i}
∏xici?? 时只需求
∏
H
(
x
i
)
c
i
\prod H(x^i)^{c_i}
∏H(xi)ci? 。这很容易计算:暴力求出分母 后,分子就是 M ( x α ) M(x^\alpha) M(xα) 。 最终贡献中,
[
x
t
]
M
(
x
α
)
M
(
x
)
??
(
t
>
β
)
[x^t]\frac{M(x^\alpha)}{M(x)}\;(t>\beta)
[xt]M(x)M(xα)?(t>β) 的系数是
(
min
?
{
L
+
1
,
t
}
?
β
)
(\min\{L{+}1,t\}{-}\beta)
(min{L+1,t}?β) 。那么事实上就是 不涉及求导的项,就是求 M ( x α ) ( 1 ? x ) M ( x ) \frac{M(x^\alpha)}{(1-x)M(x)} (1?x)M(x)M(xα)? 的远处值。注意到 deg ? M ( x ) = n ? 1 \deg M(x)=n{-}1 degM(x)=n?1,暴力枚举分子的每一项,剩下的问题就是 1 γ ( x ) \frac{1}{\gamma(x)} γ(x)1? 的远处值,显然就是个线性递推。总时间复杂度 O ( n P ( n ) log ? L ) \mathcal O(n\mathcal P(n)\log L) O(nP(n)logL),其中 P ( n ) \mathcal P(n) P(n) 是多项式乘法的复杂度。 涉及求导的项则是
1
1
?
x
[
M
(
x
α
)
M
(
x
)
]
′
\frac{1}{1-x}\left[{M(x^\alpha)\over M(x)}\right]'
1?x1?[M(x)M(xα)?]′ 的远处值。要么分子求导,这可以和上面一样通过暴力枚举每一项得到;要么分母求导,我们将得到 这看上去略显复杂。我们不妨找到其真正的样子 由于
∑
i
c
i
=
n
?
1
\sum ic_i=n{-}1
∑ici?=n?1,不同的
i
i
i 只有
n
\sqrt{n}
n? 个。 上述过程是对某个确定的 g g g 的循环指标的求解,因此最终复杂度为 O ( Partition ( n ) ? n 1.5 P ( n ) log ? L ) \mathcal O(\text{Partition}(n)\cdot n^{1.5}\mathcal P(n)\log L) O(Partition(n)?n1.5P(n)logL) 。 代码极限数据只需 11 m s 11\rm ms 11ms 出结果,恐怖如斯。 建议使用
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/30 1:24:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |