「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 ...
随机推荐
- ffmpeg 基本数据结构和对象(一): AVPacket、AVPicture、AVFrame
来源:http://blog.csdn.net/chance_yin/article/details/16817957 一.AVPacket /** * AVPacket 作为解码器的输入 或 编码器 ...
- Fundebug前端JavaScript插件更新至1.8.2,修复2个小BUG
摘要: 修复2个BUG,请大家及时更新. Fundebug前端异常监控服务 Fundebug是专业的程序异常监控平台,我们JavaScript插件可以提供全方位的异常监控,可以帮助开发者第一时间定位各 ...
- MySQL的select多表查询
select 语句: select 语句一般用法为: select 字段名 from tb_name where 条件 ; select 查询语句类型一般分为三种: 单表查询,多表查询,子查询 最简 ...
- Flask中before_request与after_request使用
目录 1.前提,装饰器的弊端 2.before_request与after_request 2.1 before_request分析: 2.2 after_request分析: 3.before_re ...
- axios 下载文件
axio请求里必须加 responseType: 'blob' 参数,如下 //下载文件 api.download=function(id) { return request({ url: this ...
- Navicat Premium 12 永久使用办法
1.按步骤安装Navicat Premium,如果没有可以去官网下载:http://www.navicat.com.cn/download/navicat-premium 2.安装好后下载激活文件:h ...
- android 发布时去除Log
1) project.properties文件里,去掉下面一行的注释: # To enable ProGuard to shrink and obfuscate your code, uncommen ...
- (转)pgbouncer常用配置项详解
https://pgbouncer.github.io/config.html 参考 <PostgreSQL修炼之道>之pgbouncer 配置文件分为[databases] 和 [pgb ...
- ActiveMQ 入门和与 Spring 整合
ActiveMQ 入门演示 activemq 依赖 <dependency> <groupId>org.apache.activemq</groupId> < ...
- Docker + Nginx + Tomcat 实现负载均衡简单演示
Docker + Nginx + Tomcat 实现负载均衡 环境 [root@pinyoyougou-docker ~]# docker -v Docker version 1.12.6, buil ...