首页 > 其他分享 >CF1770F Koxia and Sequence(条件统计转组合数计数)

CF1770F Koxia and Sequence(条件统计转组合数计数)

时间:2024-07-10 23:10:27浏览次数:6  
标签:dbinom Sequence int sum 序列 Koxia subseteq bmod CF1770F

题意简述

给定 \(n,x,y\),定义序列 \(\{a_n\}\) 合法当且仅当 \(\sum_{i=1}^na_i=x\) 且 \(\operatorname{or}_{i=1}^n=y\),你需要求出 \(\oplus_{a\ \text{is}\ \text{valid}} \oplus_{i=1}^n a_i\) 的值。

\(n<2^{40},x<2^{60},y<2^{20}\)。

分析

第一步:先做一波非常重要的分析

答案要求所有合法序列的所有数的异或,而因为一个合法序列翻转后也是合法序列,因此两个方案的贡献被抵消。那么只有回文序列才有可能有贡献。

若 \(n\) 为偶数,那么因为回文,所以会两两抵消,因此 \(n\) 为偶数时答案为 0。若 \(n\) 为奇数,则除最中间的数以外全部抵消,为表述方便我们令那一项是 \(a_1\)(你重排序列显然不会影响答案,实际上令啥或不令都无所谓),答案相当于求所有合法序列的 \(a_1\) 的异或和。

第二步:考虑如何计数

考虑要让序列符合两个条件。若让序列满足条件二,那么很难做一个使得 \(\sum a=x\) 的计数,所以考虑让 \(\sum a=x\),对条件二计数。

按位考虑 \(a_1\) 每一位的贡献,由于是异或,我们只需要算出 \(a_1\) 那一位为 \(1\) 的方案数的奇偶性,为 1 就有贡献。发现直接让或结果等于 \(y\) 很难做,考虑容斥,答案就是 \(\sum_{y'\subseteq y} (-1)^{|y|-|y'|}f(y',i)\),因为只需要奇偶性,所以答案就是 \(\oplus_{y'\subseteq y}f(y',i)\),其中 \(f(y,i)\) 表示当序列或为 \(y\) 时 \(a_1\) 第 \(i\) 位是 \(1\) 的方案数。

第三步:求解 \(f(y,i)\)

引理:\([x\subseteq y]=\dbinom{y}{x}\bmod 2\)。

证明:根据卢卡斯定理,\(\dbinom{x}{y}\equiv\dbinom{\lfloor\frac{x}{2}\rfloor}{\lfloor\frac{y}{2}\rfloor}\dbinom{x\bmod 2}{y \bmod 2}\pmod 2\),发现 \(\dbinom{x\bmod 2}{y \bmod 2}\) 只有在 \(x\bmod 2=0,y\bmod 2=1\) 时为 0。而整个求解的过程就是二进制分解的过程,所以 \(\dbinom{x}{y}\) 为 \(1\) 就相当于对于每一位,\(x\) 为 0 时 \(y\) 就不能为 1,等价于 \(y\) 是 \(x\) 子集。

而 \(f(y,i)=[2^i\subseteq y]\sum_{\sum a=x}[2^i\subseteq a_1]\prod_{i}[a_i\subseteq y]\)(后文为方便把 \([2^i\subseteq y]\) 省略),根据引理可以直接把原式子变成组合数式子(方便推导):

\[f(y,i)=\sum_{\sum a=x}\dbinom{a_1}{2^i}\prod{i}\dbinom{y}{a_i} \]

考虑将 \(\dbinom{a_1}{2^i}\) 扔到外面,把右面的 \(\dbinom{y}{a_1}\) 分离出来,那么 \(\dbinom{a_1}{2^i}\dbinom{y}{a_1}\) 就是经典的组合恒等式,它等于 \(\dbinom{y}{2^i}\dbinom{y-2^i}{a_1-2^i}\),这样 \(\dbinom{y}{2^i}\) 就可以扔出 sigma 了:

\[f(y,i)=\dbinom{y}{2^i}\sum_{\sum a=x}\dbinom{y-2^i}{a_1-2^i}\dbinom{y}{a_2}\cdots \]

引理:(范德蒙德卷积)\(\sum_{i}\dbinom{n}{r-i}\dbinom{m}{s+i}=\dbinom{n+m}{r+s}\),证明用组合意义不难证明。注意这个 \(i\) 可以取组合数有定义下的任何值。

我们把它推广到多个组合数相乘的形式,就是 \(\sum_{a_1+a_2+\cdots+a_k=x}\dbinom{b_1}{a_1}\dbinom{b_2}{a_2}\cdots\dbinom{b_k}{a_k}=\dbinom{\sum b}{\sum a}\),因为 \(a_i\) 可以取组合数有定义下的任何值。

我们把原式后面那坨 sigma 用范德蒙德卷积的推广合并掉,就是:

\[f(y,i)=\dbinom{y}{2^i}\dbinom{y-2^i+y+y+\cdots}{a_1-2^i+a_2+\cdots}=\dbinom{y}{2^i}\dbinom{ny-2^i}{x-2^i} \]

把组合数化回原来的条件形式,\(f(y,i)\) 就等于 \([2^i\subseteq y][x-2^i\subseteq ny-2^i]\),\(O(1)\) 的。

再把它代回容斥式子,\(a_1\) 第 \(i\) 位为 1 的方案数就可求,然后答案也很好求,然后就做完了。枚举 \(y\) 的子集和答案的二进制位,时间复杂度 \(O(y\log y)\)。

代码很好写。

int n,x,y;
bool In(int x,int y){return (x&y)==x;}
void solve_the_problem(){
	n=rd(),x=rd(),y=rd();
	if(n%2==0)return (void)P0;
	int ans=0;
	per(j,19,0){
		int ret=0;
		for(int i=y;i;i=(i-1)&y){
			if(In((1<<j),i)&&In(x-(1<<j),n*i-(1<<j)))ret^=1;
		}
		ans+=ret*(1<<j);
	}
	write(ans);
}

标签:dbinom,Sequence,int,sum,序列,Koxia,subseteq,bmod,CF1770F
From: https://www.cnblogs.com/dcytrl/p/18295173

相关文章

  • B. Missing Subsequence Sum
    原题链接题解1.如果没有不能表示出\(k\)的限制,那么数组由一众二次方构成2.对于小于\(k\)的数,考虑\(k\)的最高位\(i\)由于\([0,i-1]\)最多为\(2^i-1\)所以可以考虑添加一个\(k-2^i\)来表示完\([1,k-1]\)内所有的数(尽管有重复)同时删掉\(2^i\)3.对于大于\(k\)......
  • "HIBERNATE_SEQUENCE" does not exist问题处理
    JavaWeb应用在MySQL环境下可以正常运行,数据迁移至Oracle或者人大金仓后应用运行爆出如下错误:严重:Servlet.service()forservlet[JeeCmsAdmin]incontextwithpath[/dhccms]threwexception[org.hibernate.exception.SQLGrammarException:couldnotgetnextsequence......
  • 深入剖析C++的 “属性“(Attribute specifier sequence)
    引言在阅读开源项目源代码是,发现了一个有趣且特殊的C++特性:属性。属性(attributespecifiersequences)是在C++11标准引入的。在C++11之前,编译器特有的扩展被广泛用来提供额外的代码信息。例如,GNU编译器(GCC)使用__attribute__来控制函数的行为。但是缺点也很明显,那就是这种方......
  • POJ3017 Cut the Sequence
    POJ3017CuttheSequence题目大意给定一个一个长度为\(N\)的序列\(A\),要求把该序列划分成若干段,其中每一段中的数的和不大于\(M\),现在需要使得每一段中数的最大值的和最小,求该最小值。\[0\leqn\leq10^5\\0\leqm\leq10^{11}\\0\leqa_i\leq10^6\]解题思路......
  • Leetcode 1143. Longest Common Subsequence
    ProblemGiventwostringstext1andtext2,returnthelengthoftheirlongestcommonsubsequence.Ifthereisnocommonsubsequence,return0.Asubsequenceofastringisanewstringgeneratedfromtheoriginalstringwithsomecharacters(canbenone......
  • Atcoder ABC091D Two Sequences
    首先根据\(\operatorname{xor}\),就想到拆成二进制的\(a_{i,w},b_{i,w}\)来处理。类似竖式加法,考虑把得到的结果\(c_{w}\)分为\(a_{i,w}+b_{j,w}+x\),其中\(x\)就是上一位的进位。进一步的,发现对于总的\(c_{w}\),\(a_{i,w},b_{j,w}\)肯定都在这个位置加了\(......
  • CF1770E Koxia and Tree
    题目描述给定一棵\(n\)个点的树,在\(k\)个位置上存在蝴蝶,我们需要给\(n-1\)条边定向,如果一条边的起点有蝴蝶且终点没有蝴蝶,那么蝴蝶将被移动到终点,我们会按照给定边的顺序移动,问最终所有蝴蝶的树上距离的和的期望,答案除于\(\frac{k(k-1)}{2}\),对\(998244353\)取模\[k\len\le300......
  • D. Invertible Bracket Sequences
    原题链接题解把(当作+1,)当作-1,我们可以得到这样的图像易得要保证翻完之后整体的合法性,\([l,r]\)内的左右括号数量要相等,在图上看就是\(pre[l-1]==pre[r]\)相等一个合法括号,要保证所有的\(pre[i]\)不小于0,因此反过来之后,最小的\(pre[i]\)等于\(pre[r]-\max(pre[k]),k\in......
  • 汽车电子-如何用Test Sequence做自动化测试
    汽车电子-如何用Test Sequence做自动化测试附赠自动驾驶最全的学习资料和量产经验:链接如何用来做自动化测试呢?创建一个测试序列点击模型右键Test Harness/Creat for左边选择Sequence通过Harness进行调试修改后可以保存到原来模型中双击点开表格,在里面填入输入......
  • square869120Contest #3 G Sum of Fibonacci Sequence
    洛谷传送门AtCoder传送门特判\(n=1\)。将\(n,m\)都减\(1\),答案即为\[[x^m]\frac{1}{(1-x-x^2)(1-x)^n}\]若能把这个分式拆成\(\frac{A(x)}{(1-x)^n}+\frac{B(x)}{1-x-x^2}\)的形式,其中\(\degA(x)\len-1,\degB(x)\le1\),那么答案就是好算的。......