【uoj#310】[UNR #2]黎明前的巧克力 FWT
题目描述
给出 $n$ 个数,从中选出两个互不相交的集合,使得第一个集合与第二个集合内的数的异或和相等。求总方案数。
输入
第一行一个正整数 $n$ ,表示巧克力的个数。
第二行 $n$ 个整数 $a_i$ 表示每个巧克力的美味值。
输出
输出一行一个整数,表示能使得他们心情契合的吃巧克力的方案数对 998244353 取模的结果。
样例输入
6
1 2 3 4 5 6
样例输出
80
题解
FWT
首先如果两个集合的异或相等,那么它们的异或为0。原问题转化为求选出一个异或和为0的集合并分为两个即可的方案数。
那么设 $f[i][j]$ 表示前 $i$ 个数中选出的数的异或和为 $j$ 的方案数。那么就有 $f[i][j]=f[i-1][j]+2·f[i-1][j\ xor\ a[i]]$ 。
可以发现这是一个异或卷积的形式,相当于每次卷的是:$b[0]=1,b[a[i]]=2$ ,然而并无卵用 = =
考虑对这个过程进行FWT,那么:
0对每个位置的贡献都是1;
a[i]对某些位置的贡献是2,对某些位置的贡献是-2。
所以每次卷上的 $b$ 数组的每个数都是-1或3。
另有:和的FWT等于FWT的和。
因此把它们求和后进行FWT,那么就知道了每个位置FWT的和。
由于只有-1和3,因此可以解出-1和3的个数,然后快速幂处理一下即可。
最终再逆FWT回来即可。
时间复杂度 $O(n\log n)$
#include <cstdio>
#define N 1050000
#define mod 998244353
typedef long long ll;
ll a[N] , b[N];
ll pow(ll x , ll y)
{
ll ans = 1;
while(y)
{
if(y & 1) ans = ans * x % mod;
x = x * x % mod , y >>= 1;
}
return ans;
}
void fwt(ll *a , int n , int flag)
{
int i , j , k , t;
for(i = 1 ; i < n ; i <<= 1)
for(j = 0 ; j < n ; j += (i << 1))
for(k = j ; k < j + i ; k ++ )
t = a[k] , a[k] = (t + a[k + i]) * flag % mod , a[k + i] = (t - a[k + i] + mod) * flag % mod;
}
int main()
{
int n , mx = 0 , m = 1 , i , x;
scanf("%d" , &n);
for(i = 1 ; i <= n ; i ++ )
{
scanf("%d" , &x) , a[0] ++ , a[x] += 2;
if(mx < x) mx = x;
}
while(m <= mx) m <<= 1;
fwt(a , m , 1);
for(i = 0 ; i < m ; i ++ )
{
x = (n + a[i]) * 748683265 % mod;
if(((x + n) % mod) & 1) b[i] = (mod - pow(3 , x)) % mod;
else b[i] = pow(3 , x);
}
fwt(b , m , 499122177);
printf("%lld\n" , (b[0] - 1 + mod) % mod);
return 0;
}
【uoj#310】[UNR #2]黎明前的巧克力 FWT的更多相关文章
- uoj310【UNR #2】黎明前的巧克力(FWT)
uoj310[UNR #2]黎明前的巧克力(FWT) uoj 题解时间 对非零项极少的FWT的优化. 首先有个十分好想的DP: $ f[i][j] $ 表示考虑了前 $ i $ 个且异或和为 $ j ...
- UOJ #310 黎明前的巧克力 FWT dp
LINK:黎明前的巧克力 我发现 很多难的FWT的题 都和方程有关. 上次那个西行寺无余涅槃 也是各种解方程...(不过这个题至今还未理解. 考虑dp 容易想到f[i][j][k]表示 第一个人得到巧 ...
- UOJ#310 【UNR #2】黎明前的巧克力 FWT 多项式
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ310.html 题目传送门 - UOJ#310 题意 给定 $n$ 个数 ,请你选出两个不相交的集合(两个 ...
- UOJ#310. 【UNR #2】黎明前的巧克力(FWT)
题意 题目链接 Sol 挂一个讲的看起来比较好的链接 然鹅我最后一步还是没看懂qwq.. 坐等SovietPower大佬发博客 #include<bits/stdc++.h> using ...
- [UOJ UNR#2 黎明前的巧克力]
来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 很奇妙的一道题 首先不难发现一个暴力做法,就是f[i]表示异或和为i的答案数,每次FWT上一个F数组,其中F[0]=1,F[ai]=2 ...
- UOJ #310 黎明前的巧克力 (FWT)
题目传送门 题目大意:给你一个序列,定义一个子序列的权值表示子序列中元素的异或和,现在让你选出两个互不相交的子序列,求选出的这两个子序列权值相等的方案数,$n,a_{i}\leq 10^{6}$ 这是 ...
- UOJ310. 【UNR #2】黎明前的巧克力 [FWT]
UOJ 思路 显然可以转化一下,变成统计异或起来等于0的集合个数,这样一个集合的贡献是\(2^{|S|}\). 考虑朴素的\(dp_{i,j}\)表示前\(i\)个数凑出了\(j\)的方案数,发现这其 ...
- [UOJ310][UNR #2]黎明前的巧克力
uoj description 给你\(n\)个数,求从中选出两个交集为空的非空集合异或和相等的方案数模\(998244353\). sol 其实也就是选出一个集合满足异或和为\(0\),然后把它分成 ...
- [FWT] UOJ #310. 【UNR #2】黎明前的巧克力
[uoj#310][UNR #2]黎明前的巧克力 FWT - GXZlegend - 博客园 f[i][xor],考虑优化暴力,暴力就是FWT xor一个多项式 整体处理 (以下FWT代表第一步) F ...
随机推荐
- 最简单的rman操作
连接: [root@oracle000 ‾]# su - oracle [oracle@oracle000 ‾]$ rman target / lines) Recovery Manager: Rel ...
- (三)Hololens Unity 开发之 语音识别
学习源于官方文档 Voice input in Unity 笔记一部分是直接翻译官方文档,部分各人理解不一致的和一些比较浅显的保留英文原文 (三)Hololens Unity 开发之 语音识别 Hol ...
- Maven学习(十五)-----Maven常用命令
一.Maven常用命令 1.1.Maven 参数 -D 传入属性参数 -P 使用pom中指定的配置 -e 显示maven运行出错的信息 -o 离线执行命令,即不去远程仓库更新包 -X 显示ma ...
- Zigbee系列(概览)
Zigbee技术特点 低速率: 数据传输速率只有20~250kb/s, 2.4GHZ提供250kb/s, 915MHz对应40kb/s, 868Mhz对应20kb/s 低功耗:睡眠模式设备使用电池供电 ...
- PHP序列化serialize()和反序列化unserialize()
所谓的序列化,就是把保存在内存中的各种对象状态或属性保存起来,在需要时可以还原出来. serialize() 可处理除了 resource 之外的任何类型返回字符串,此字符串包含了表示 value 的 ...
- leetcode- 将有序数组转换为二叉搜索树(java)
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0, ...
- 天马行空-Ops平台建设概述
1 概述 什么是Ops平台,Ops平台的目标是什么,建设的考虑点有哪些?本章节以实际生活中医院的例子来进行各形象的阐述. 医院包含各种诊断治疗设备,病历库,医生.一个孕妇需要到医院 ...
- Action Required: Please provide your Tax Identity Information - Amazon Seller Tax Identity Collection
Hello ***, Your selling privileges have been suspended because we have not received required tax i ...
- PS1修改xshell命令行样式
linux 其他知识目录 在/root/.bashrc下加入如下代码. export PS1='\n\e[1;37m[\e[m\e[1;32m\u\e[m\e[1;33m@\e[m\e[1;35m\H ...
- underscore.js源码解析(三)
最近工作比较忙,做不到每周两篇了,周末赶着写吧,上篇我针对一些方法进行了分析,今天继续. 没看过前两篇的可以猛戳这里: underscore.js源码解析(一) underscore.js源码解析(二 ...