「UNR#2」黎明前的巧克力
「UNR#2」黎明前的巧克力
解题思路
考虑一个子集 \(S\) 的异或和如果为 \(0\) 那么贡献为 \(2^{|S|}\) ,不难列出生产函数的式子,这里的卷积是异或卷积。
\]
因为每一项只有两项 \(x^0,x^{a_i}\) 有值,记 \(f_i(x) =2x^{a_i}+1\), \(f'_i(x)=\text{Fwt}f(x)\) ,有
\]
不难发现 \(f'_i(x)\) 的每一项不是 \(3\) 就是 \(-1\) 。
这一步比较巧妙,考虑到 \(\text{Fwt}\) 是一个线性变换,线性变换的和等于和的线性变换,我们对所有多项式求和后 \(\text{Fwt}\) ,可以解方程解出每一项由多少个 \(3\) 和多少个 \(-1\) 构成。
设 \([x^S]f_i(x)\) 由 \(k\) 个 \(-1\) 贡献得到 \(k =\frac{3n-[x^S]f_i(x)}{4}\),然后我们要求所有多项式卷积的 \(\text{Fwt}\) 后的结果,即 \([x^S]=(-1)^k\times3^{n-k}\) ,最后再 \(\text{IFwt}\) 回去即可。
其实最后是不需要 \(\text{IFwt}\) 的,我们只需要求 \([x^0]F(x)\) 的值,根据 \(\text{IFwt}\) 的式子
\]
所以 \([x^0]F(x)\) 的值就是每一项系数加起来除一个 \(2^n\) 。
小结 :遇到点值的时候不要只考虑套路,应当多观察性质。
code
/*program by mangoyang*/
#include <bits/stdc++.h>
#define inf (0x7f7f7f7f)
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
typedef unsigned long long ull;
typedef long long ll;
using namespace std;
template <class T>
inline void read(T &x){
int ch = 0, f = 0; x = 0;
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = 1;
for(; isdigit(ch); ch = getchar()) x = x * 10 + ch - 48;
if(f) x = -x;
}
const int N = 2000005, mod = 998244353;
int a[N], n, res;
inline int Pow(int a, int b){
int ans = 1;
for(; b; b >>= 1, a = 1ll * a * a % mod)
if(b & 1) ans = 1ll * ans * a % mod;
return ans;
}
int main(){
read(n);
int tot = 20, len = 1 << 20;
for(int i = 1, x; i <= n; i++)
read(x), a[x] += 2, a[0]++;
for(int i = 0; i < tot; i++)
for(int s = 0; s < len; s++) if(s & (1 << i)){
int x = a[s], y = a[s^(1<<i)];
a[s^(1<<i)] = x + y >= mod ? x + y - mod : x + y;
a[s] = y - x < 0 ? y - x + mod : y - x;;
}
for(int i = 0; i < len; i++){
int k = ((3ll * n - a[i]) % mod + mod) % mod;
k = 1ll * k * Pow(4, mod - 2) % mod;
if(k & 1) res -= Pow(3, n - k);
else res += Pow(3, n - k);
if(res >= mod) res -= mod;
if(res < 0) res += mod;
}
cout << (1ll * res * Pow(len, mod - 2) % mod + mod - 1) % mod << endl;
return 0;
}
「UNR#2」黎明前的巧克力的更多相关文章
- UOJ #310「UNR #2」黎明前的巧克力
神仙题啊... UOJ #310 题意 将原集合划分成$ A,B,C$三部分,要求满足$ A,B$不全为空且$ A$的异或和等于$ B$的异或和 求方案数 集合大小 $n\leq 10^6$ 值域$v ...
- 【UOJ#310】【UNR#2】黎明前的巧克力(FWT)
[UOJ#310][UNR#2]黎明前的巧克力(FWT) 题面 UOJ 题解 把问题转化一下,变成有多少个异或和为\(0\)的集合,然后这个集合任意拆分就是答案,所以对于一个大小为\(s\)的集合,其 ...
- 【UNR #2】黎明前的巧克力 解题报告
[UNR #2]黎明前的巧克力 首先可以发现,等价于求 xor 和为 \(0\) 的集合个数,每个集合的划分方案数为 \(2^{|S|}\) ,其中 \(|S|\) 为集合的大小 然后可以得到一个朴素 ...
- uoj310【UNR #2】黎明前的巧克力(FWT)
uoj310[UNR #2]黎明前的巧克力(FWT) uoj 题解时间 对非零项极少的FWT的优化. 首先有个十分好想的DP: $ f[i][j] $ 表示考虑了前 $ i $ 个且异或和为 $ j ...
- [FWT] UOJ #310. 【UNR #2】黎明前的巧克力
[uoj#310][UNR #2]黎明前的巧克力 FWT - GXZlegend - 博客园 f[i][xor],考虑优化暴力,暴力就是FWT xor一个多项式 整体处理 (以下FWT代表第一步) F ...
- @uoj - 310@ 【UNR #2】黎明前的巧克力
目录 @description@ @solution@ @accepted code@ @details@ @description@ Evan 和 Lyra 都是聪明可爱的孩子,两年前,Evan 开 ...
- UOJ310. 【UNR #2】黎明前的巧克力 [FWT]
UOJ 思路 显然可以转化一下,变成统计异或起来等于0的集合个数,这样一个集合的贡献是\(2^{|S|}\). 考虑朴素的\(dp_{i,j}\)表示前\(i\)个数凑出了\(j\)的方案数,发现这其 ...
- uoj310. 【UNR #2】黎明前的巧克力
题目描述: uoj 题解: WTF. 看题解看了一个小时才看明白. 首先有状态$f[i][j]$表示前$i$个东西两人取,最后两人异或和为$j$的有多少方案. 转移为$f[i][j]=f[i-1][j ...
- UOJ#310.【UNR #2】黎明前的巧克力(FWT)
题意 给出 \(n\) 个数 \(\{a_1, \cdots, a_n\}\),从中选出两个互不相交的集合(不能都为空),使得第一个集合与第二个集合内的数的异或和相等,求总方案数 \(\bmod 99 ...
随机推荐
- Guava工具类学习
目录 一.介绍 二.Optional类 1.定义 2.java8自带Optional 3.使用 三.Preconditions类 1.定义 2.使用 四.Ordering类 1.定义 2.使用 五.R ...
- 个人项目-WC(Java实现)
一.Github项目地址: https://github.com/kestrelcjx/-WC-Java- 二.PSP表格 PSP2.1 Personal Software Process Stage ...
- Spring boot配置MongoDB以及Morphia踩坑记录
pom 因为项目中采用Morphia(MongoDB的ODM框架,对象-文档映射(object-document mapper)),因此需要在pom文件中引入相应依赖: <dependency& ...
- bokeh 中 ValueError: Unrecognized range input: 解决方法
bokeh_data.index =bokeh_data.index.astype(np.str) 将其转换为字符型
- nginx上部署PHP
环境:centos7 nginx1.16.1 (1)先将tp源代码下载到nginx的站点目录下 注意:存放tp的目录要有可执行权限,否则无法进入目录,访问报403 (2)servr配置: serve ...
- 阿里云 OSS文件存储挂到云服务器ESC文件系统中
ossfs能让您在Linux系统中,将对象存储OSS的存储空间(Bucket)挂载到本地文件系统中,您能够像操作本地文件一样操作OSS的对象(Object),实现数据的共享. 使用限制 ossfs使用 ...
- python 和 R 语言 中的 range() 函数
1.python 中的 range() 函数生成整数序列,常用于 for 循环的迭代. 示例: 2.R 语言中的 range() 函数返回一个数值向量中的最小值和最大中,常用于求极差. 示例: 按语: ...
- maven 配置文件
<properties> <project.builder.sourcesEncoding>UTF-8</project.builder.sourcesEncoding& ...
- Http请求头中 X-Requested-With
String requestedWith = ((HttpServletRequest) request).getHeader("X-Requested-With"); 如果 re ...
- linux脚本中有source相关命令时的注意事项
写这个问题起因是因为一个同学去的java一键脚本环境变量设置问题, [root@localhost u01]# more 1.sh #!/bin/bash grep -q "export J ...