首页 > 其他分享 >NOD2308B. 酒杯(glass)

NOD2308B. 酒杯(glass)

时间:2024-10-24 22:22:38浏览次数:5  
标签:count aligned sum 2i glass 2n 酒杯 NOD2308B binom

NOD2308B. 酒杯(glass)

题意

有一棵 \(n\) 层的满二叉树,有 \(m\) 次操作,每次操作从 \(2^n-1\) 个节点中随机选择一个节点染黑(可以重复染色),问使得每一层都至少有一个节点被染黑的方案数。\(n,m\le 2000\),答案对 \(10^9 + 7\) 取模。

solution

%%% 蔡队

代码未编写,因此过程可能推错,请自行辨别 and 欢迎指出

显然问题可以简化成有 \(n\) 个点,第 \(i\) 个点有 \(2^{i-1}\) 种方式可以被染黑,问所有点都被染黑的方案数。

暴力就是枚举每次操作染了哪个点。

直接统计染上所有点的方案数是不好统计的。但是算至多可以染某些点的方案数是好算的。

考虑容斥。用点集 \(S\) 表示不允许染 \(S\) 里面的点。

子集枚举。

\[\begin{aligned} ans & =\sum_{S\subseteq [n]}(-1)^{|S|} (\sum_{i \not \in S} 2^i)^m\\ & = \sum_{S=0}^{2^n-1} (-1)^{count(S)} (2^n-1-S)^m \end{aligned} \]

设 \(S\) 表示允许染色的点集,那么有更加优美的式子:

\[f(n,m)=\sum_{S=0}^{2^n-1} (-1)^{n-count(S)} S^m \]

换个名字,写成:

\[f(n,m)=\sum_{i=0}^{2^n-1} (-1)^{n-count(i)} i^m \]

发现 \(f(n,m)\) 的个数是 \(nm\) 的,考虑变成递推转移。

假设我们考虑完前 \(n-1\) 个点,然后再加上第 \(n\) 个点,假设我们的 \(i\) 是把序号小的放在低位,有:

若 \(i\) 是把序号大的放在低位,式子会变好看吗?

\[f(n,m)=\sum_{i=0}^{2^{n-1}-1} (-1)^{n-count(i)} ((2i)^m - (2i+1)^m) \]

表示子集枚举前 \(i\) 个点的选择状态,乘方案数的时候枚举是否选择第 \(n\) 个数。\(2i\) 的状态表示不选,\(2i+1\) 的状态表示选择。

根据二项式定理:\((x+y)^n = \sum_{i=0}^n \binom{n}{i} x^{n-i}y^i\)。

把 \((2i+1)^m\) 拆开,变成 \(\sum_{k=0}^m \binom{m}{k} (2i)^k\)。

有:

\[\begin{aligned} f(n,m) & =\sum_{i=0}^{2^{n-1}-1} (-1)^{n-count(i)} (\sum_{k=0}^{m-1} - \binom{m}{k}(2i)^k )\\ & =\sum_{i=0}^{2^{n-1}-1} (-1)^{n-count(i)-1} (\sum_{k=0}^{m-1} \binom{m}{k}(2i)^k )\\ & =\sum_{k=0}^{m-1} \binom{m}{k} 2^k \sum_{i=0}^{2^{n-1}-1} (-1)^{n-count(i)-1} i^k\\ & =\sum_{k=0}^{m-1} \binom{m}{k} 2^k f(n-1,k) \end{aligned} \]

至此你获得了转移复杂度为 \(O(m)\) 的递推式。状态是 \(O(nm)\),总时间复杂度是 \(O(nm^2)\)。

边界条件是 \(f(0,0)=1\)。

蔡队的分段打表方法(很有学习意义)

发现 \(f(n,m)\) 只和 \(f(n-1,k)\) 有关,因此对于第一维每隔 \(B\) 打一个长度为 \(m\) 的表。

然后发现空间不够。为什么 cplusoj 只能上传 50kb 的代码?解决方法是把表压成字符,使用表的时候进行解码操作。

题解提出倍增优化。

也许突破口是 \(f(n,m)\) 的具体意义感觉可以倍增?或许是因为 \(f(n,m)\) 只和 \(f(n-1)\) 有关,所以想要优化第一维的递推?类似于快速幂?

根据 \(f(2n,m)\) 的具体意义。考虑子集枚举前 \(n\) 个数的选择状态,乘方案数的时候枚举后 \(n\) 个数的选择状态。

\[\begin{aligned} f(2n,m) & =\sum_{i=0}^{2^{2n}-1} (-1)^{2n-count(i)} i^m\\ & = \sum_{i=0}^{2^n-1} (-1)^{n-count(i)} (\sum_{j=0}^{2^n-1} (-1)^{n-count(j)} (i+2^n j)^m)\\ & = \sum_{i=0}^{2^n-1} (-1)^{n-count(i)}(\sum_{j=0}^{2^n-1} (-1)^{n-count(j)} (\sum_{k=0}^m \binom{m}{k} i^{m-k} 2^{nk} j^k))\\ & = \sum_{k=0}^m \binom{m}{k} 2^{nk} \sum_{i=0}^{2^n-1} (-1)^{n-count(i)} i^{m-k} \sum_{j=0}^{2^n-1} (-1)^{n-count(j)} j^k \\ & = \sum_{k=0}^m \binom{m}{k} 2^{nk} f(n,m-k)f(n,k) \end{aligned} \]

好像……解决啦。Hooray!

但是 \(n\) 不一定是 \(2\) 的幂次怎么办呢?能否推广?

\[\begin{aligned} f(2n+n,m) & =\sum_{i=0}^{2^{2n}-1} (-1)^{2n-count(i)} (\sum_{j=0}^{2^n-1} (-1)^{n-count(j)} (i+2^{2n} j)^m)\\ & =\sum_{i=0}^{2^{2n}-1} (-1)^{2n-count(i)} (\sum_{j=0}^{2^n-1} (-1)^{n-count(j)} (\sum_{k=0}^{m} \binom{m}{k} i^{m-k} 2^{2nk}j^k ))\\ & =\sum_{k=0}^{m} \binom{m}{k} 2^{2nk} \sum_{i=0}^{2^{2n}-1} (-1)^{2n-count(i)} i^{m-k} \sum_{j=0}^{2^n-1} (-1)^{n-count(j)} j^k\\ & =\sum_{k=0}^{m} \binom{m}{k} 2^{2nk} f(2n,m-k) f(n,k) \end{aligned} \]

太优美了!可以推广!

那么就做完了,对 \(n\) 这一维倍增,时间复杂度 \(O(nm \log n)\)。

code

待订正。

标签:count,aligned,sum,2i,glass,2n,酒杯,NOD2308B,binom
From: https://www.cnblogs.com/liyixin0514/p/18501396

相关文章

  • 时序约束和综合+跨时钟产生的问题+spyglass的使用+SOC设计问题
    时序约束和综合时钟频率#时钟单位为ns,2ns对应500M时钟频率create_clock-period2[getportsclk]skew#设置时钟的skew,即上升沿之间的误差,当前设置为0.3nsset_clock_uncertainty-setup0.3[get_clocksCLK]transition#设置时钟上升沿的转化时间set_clock_transi......
  • NHS修饰的ITO玻片|活化酯改性ITO芯片|NHS Functional Glass Slides
    NHS修饰的ITO玻片|活化酯改性ITO芯片|NHSFunctionalGlassSlidesNHS修饰的ITO玻片是一种在科研领域广泛应用的特殊玻片,它结合了NHS(N-hydroxysuccinimide,N-羟基琥珀酰亚胺)修饰和ITO(IndiumTinOxide,氧化铟锡)涂层的优点。以下是对NHS修饰的ITO玻片的详细解释:一、NHS修饰概述......
  • 羧基修饰的ITO玻片|Carboxylic acid functional glass slides
    羧基修饰的ITO玻片|Carboxylicacidfunctionalglassslides羧基修饰的ITO玻片是一种在氧化铟锡(ITO)涂层表面引入羧基官能团的玻璃载玻片。这种修饰增强了ITO与其他材料的粘附性,并提供了反应活性的表面,适用于电子学和化学领域的各种应用,如场效应晶体管、太阳能电池和固相合成......
  • Unity实战案例 2D小游戏HappyGlass(模拟水珠)
    本案例素材和教程都来自Siki学院,十分感谢教程中的老师本文仅作学习笔记分享交流,不作任何商业用途预制体  在这个小案例中,水可以做成圆形但是带碰撞体,碰撞体比图形小一圈,顺便加上Trailrenderer组件 材质将碰撞材质的friction为0,bonciness可以按照需要修改脚本 ......
  • Spyglass cdc check报的errors
    1.report clocksignalsconvergingonamuxslave_adc是在mclk下进行同步,adc_bclk_i则是来自外部,因此切换bclk可能导致毛刺。可以通过切换之前先关闭后级的相关模块。 2.flagsaclocksinalwhosemulti-fanoutsconverge不太清楚要不要解决3.Ac_unsync01(3):Check......
  • B. 酒杯
    题意给定\(n\)和\(m\),问将\(m\)个点随机放在一个深度为\(n\)的满二叉树的节点上后,每一层至少有一个点的方案数。思路首先,我们发现正着直接算会有一个很麻烦的地方就是若多个点放在同一个点上,那么方案数就要除上\(siz!\)。于是我们考虑反着算,即容斥。我们可以钦定哪几......
  • Codeforces Round 918 (Div. 4)----->E. Romantic Glasses
    一,思路:这题是一道前缀和的扩展题。题目要我们求是否有一个区间内的奇偶之和是否相等,我们可以对数组重新赋值,奇数位赋值为负数,偶数位不变。这样我们后面求前缀和,只要看有没有一段区间和为零的。二,代码:#include<iostream>#include<cstring>#include<algorithm>#include<vec......
  • CF1915E Romantic Glasses 题解
    我们考虑维护\(sum_i\)表示前\(i\)个数中偶数下标的数之和与奇数下标的数之和之差,其中\(sum_0=0\)。若在某一时刻,有\(sum_i=sum_j(j<i)\),说明\(j\simi\)中偶数下标的数之和与奇数下标的数之和之差为\(0\)。这个使用map判断即可。实现:intn,f=0;cin>>n;m.clear()......
  • ICPC2021Kunming G Glass Bead Game 题解
    QuestionICPC2021KunmingGGlassBeadGame有\(n\)个玻璃珠,\(B_1,B_2,\cdots,B_n\)每一步你可以选择一个\(B_i\)移道第一个位置上,花费的代价为操作前\(B_i\)前面的玻璃珠的个数。已知每一步选择玻璃珠\(B_i\)的概率\(p_i\),问当\(m\rightarrow\infty\)时,在第\(......
  • 深度学习---单目标关键点检测网络Stacked Hourglass
    StackedHourglassNetworks是2016年提出的一种用于单人人体姿态估计的网络,并取得了很好的效果。这里我们从网络结构以及一些实现细节简单分析下这个网络。paper:https://arxiv.org/pdf/1603.06937.pdfcode:https://github.com/princeton-vl/pytorch_stacked_hourglasshttps:......