首页 > 其他分享 >GalaxyOJ 8699 午夜后的棒棒糖

GalaxyOJ 8699 午夜后的棒棒糖

时间:2023-12-23 18:44:06浏览次数:43  
标签:计数 个数 varnothing 异或 8699 bigoplus GalaxyOJ 集合 棒棒糖

挺高妙的题,思维套结论。

题意:给定 \(n\) 个数,求在其中选三个不交的子集,使得其异或和相等的方案数。

三个不交的集合异或和相等 \(\Leftrightarrow\) 两两异或和为 \(0\)。

观察两个异或和为 \(0\) 的集合 \(S,T(\not=\varnothing)\) 和答案有什么关系。

  • 有交但不包含

设 \(R=S\cap T\),则有 \(\bigoplus_{i\in R} a_i=\bigoplus_{i\in S\setminus R}a_i=\bigoplus_{i\in T\setminus R}a_i\)。

再考虑分出来这三个集合被计算了多少遍。发现一共有 \(6\) 中不同的 \((S,T)\) 会得到这三个集合,也正好该集合的轮换数量。所以可以看作每对 \((S,T)\) 都对答案产生了 \(1\) 的贡献。于是 \(A,B,C\) 都不为 \(\varnothing\) 的情况就计数完了。

  • else

因为三个非空集合的情况已经计数完了,无交的情况就考虑计数 \(A,B,C\) 有一个为空集的情况。发现相互包含本质上就是小集合并上另一个集合等于大集合。

和上面类似的,发现每个集合仍然被算了 \(6\) 次。

综上,得出结论:最多有一个为 \(\varnothing\) 的三元组个数 \(=\) 选 \(S,T\) 的方案数。

剩下两种情况也很好算,就不展开讲了。

upd:发现其实有一种简单很多的做法……

发现 \(A,B,C\) 无交,所以 \((A,B,C)\Leftrightarrow (A\cup B,B\cup C)\) 双射。

所以答案即为 \((S,T)\) 的个数的平方。这是个线性基经典问题,解决。

我是不是做过类似题来着?鉴定为打表技巧没有掌握好。@sk

标签:计数,个数,varnothing,异或,8699,bigoplus,GalaxyOJ,集合,棒棒糖
From: https://www.cnblogs.com/yinhee/p/lolipop.html

相关文章

  • A003 《棒棒糖自由》编程源码
    一、课程介绍本节课将复习变量并学习算术运算、dot画圆等新知识,最终绘制出一个彩色棒棒糖。二、知识重难点解析算术运算符Python编程中,加、减、乘、除这些基本数学运算,是经常用到的。运算符号分别是“+”、“-”、“*”和“”/“。注意:电脑上的乘和除号与大家在作业本上写的......
  • d3.js 绘制Lollipop plot(棒棒糖图)
    棒棒糖图与普通的条形图功能相似。从图形上来看,棒棒糖图是由一条锚定在x轴或y轴上的线和点组成的。使用d3js绘制棒棒糖图很简单,因此这次为了学习d3js的一些方法,使用按......
  • GalaxyOJ-902 Mine
    题目描述有一个1维的扫雷游戏,每个格子用表示有雷,用0/1/2表示无雷并且相邻格子中有0/1/2个雷。给定一个仅包含?、、0、1、2的字符串S,问有多少种方法将所有的?改......