热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CodeforcesGoodBye2022CF1770FKoxiaandSequence题解

题目链接注意题目要求的是所有好序列的所有元素的XOR之和的XOR之和。我一开始以为是所有XOR之和的加法和导致不知道官方题解在讲什么。假设我们枚举一个位置\(1\lei\len\)

题目链接

注意题目要求的是所有好序列的所有元素的XOR之和的XOR之和。我一开始以为是所有XOR之和的加法和导致不知道官方题解在讲什么。

假设我们枚举一个位置\(1\le i\le n\)和一个数值\(v\),统计第i个位置为v的好序列的个数,如果个数为奇数就可以把最终答案异或上v。由于对于同一个v和不同的i,这个个数都相同,所以n为偶数的时候最终答案是0。要先把这个特判掉,不然影响后面思考。n为奇数的情况,其实我们就只要枚举所有v,求出\(a_1=v\)的好序列的个数,如果是奇数就把答案异或上v就行了。把数值的每一位拆开进一步转化成这样:枚举一个bit i(\(0\le i\le19\)),求出\(a_1\)的二进制第i位为1的好序列的个数,如果个数是奇数则最终答案的第i位为1。观察可以发现这个问题形式与之前的那个等价。

我们先枚举i。一个好的序列要满足所有元素的或=y,要求刚好=y是很难计算的,不如用容斥:定义\(f_s\)表示所有元素的或是s的子集(可以=s),且和为x,同时满足\(a_1\)的第i位为1的好序列个数。那么或刚好=y的好序列数量=\(\sum_{s\subseteq y}f_s(-1)^{|s\ xor\ y|}\)。令\(g_s=f_s\ mod \ 2\),那么或刚好=y的好序列数量奇偶性=\(\bigoplus_{s\subseteq y}g_s\),其中\(\bigoplus\)表示异或和。

当确定了i和s时,\(g_s\)其实是好算的。先看不要求\(a_1\)的第i位为1的情况,\(g_s=(\sum_{t_1,t_2\cdots t_n,\sum_t=x} \prod_{i=1}^n [t_i\&s=t_i])mod\ 2\)。有一个关于组合数的结论,\([m\&n=m]=\binom nm \ mod\ 2\),也就是\(\binom nm\)为奇数的充要条件是\(m\)\(n\)的子集。所以\(g_s=(\sum_{t_1,t_2\cdots t_n,\sum_t=x} \prod_{i=1}^n \binom{s}{t_i}\ mod\ 2)mod\ 2=\binom{ns}{x}\ mod\ 2\)。加上要求\(a_1\)的第i位为1的条件,其实也只要改成要求\(s\)的第i位为1,然后\(g_s=\binom{ns-2^i}{x-2^i}\ mod\ 2\)就行了。

枚举所有i和s然后算出所有\(g_s\)就能求出最终答案了。总时间复杂度\(O(ylogy)\)



点击查看代码

#include
#define rep(i,n) for(int i=0;i#define repn(i,n) for(int i=1;i<=n;++i)
#define LL long long
#define pii pair
#define fi first
#define se second
#define mpr make_pair
#define pb push_back
void fileio()
{
#ifdef LGS
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
}
void termin()
{
#ifdef LGS
std::cout<<"\n\nEXECUTION TERMINATED";
#endif
exit(0);
}
using namespace std;
LL n,x,y;
int main()
{
fileio();
cin>>n>>x>>y;
if(n%2==0){puts("0");return 0;}
LL ans=0;
rep(i,20)
{
LL res=0;
for(LL sub=y;sub>0;sub=(sub-1)&y) if(sub&(1< {
LL up=n*sub-(1LL< if(up<0||dn<0) continue;
if((up&dn)==dn) res^=1;
}
if(res) ans|=(1< }
cout< termin();
}



推荐阅读
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • steps/train_mono.sh
    定义拓扑结构、参数初始化$gmm-init-mono--shared-phones$langphonessets.int--train-feats$featssubset-fe ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 本文整理了Java中org.apache.commons.collections4.ListUtils.unmodifiableList()方法的一些代码示例,展示了 ... [详细]
author-avatar
白杨树问天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有