「NowCoder Contest 295」H. Playing games
还是见的题太少了
「NowCoder Contest 295」H. Playing games
题意:选出尽量多的数使得异或和为$ 0$
$ Solution:$
问题等价于选出尽量少的数使得异或和为全集
根据线性基思想可以推得整个集合的异或集合可以被不超过$ bitcount$个数的异或集合表示
因此答案也不超过$ bitcount$
对于原集合我们做若干次$ FWT$
每次把当前异或集合卷上初始集合
复杂度$ O(n \ log^2 \ n)$
足以通过本题
但是还不够
我们发现我们只是想知道$ FWT$数组中某一位上的值
设$ f’$是数组$ f$的$FWT$数组
有$ f_S=\frac{1}{2^n} \sum\limits f'_T(-1)^{|S\cap T|}$
这样我们只需要初始对原数组$ FWT$一次
期间一直用点值表达式进行计算
然后单词$ O(n)$验证即可
时间复杂度:$ O(n \ log \ n)$
$ my \ code$
#include<ctime>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#define p 998244353
#define rt register int
#define ll long long
using namespace std;
inline ll read(){
ll x = ; char zf = ; char ch = getchar();
while (ch != '-' && !isdigit(ch)) ch = getchar();
if (ch == '-') zf = -, ch = getchar();
while (isdigit(ch)) x = x * + ch - '', ch = getchar(); return x * zf;
}
void write(ll y){if(y<)putchar('-'),y=-y;if(y>)write(y/);putchar(y%+);}
void writeln(const ll y){write(y);putchar('\n');}
int i,j,k,m,n,x,y,z,cnt,invn;
int ksm(int x,int y){
int ans=;
for(rt i=y;i;i>>=,x=1ll*x*x%p)if(i&)ans=1ll*x*ans%p;
return ans;
}
void FWT(int n,int *A,int fla){
for(rt i=;i<n;i<<=)
for(rt j=;j<n;j+=i<<)
for(rt k=;k<i;k++){
const int x=A[j+k],y=A[i+j+k];
A[j+k]=(x+y)%p,A[i+j+k]=(x-y)%p;
}
if(fla==-)for(rt i=;i<n;i++)A[i]=1ll*A[i]*invn%p;
}
int a[],b[];
int main(){
n=read();int s=;
for(rt i=;i<=n;i++){
x=read();s^=x;
a[x]=;
}
int lim=;invn=ksm(lim,p-);
a[]=;FWT(lim,a,-);
for(rt i=;i<lim;i++)b[i]=;
for(rt i=;i<=;i++){
ll ans=;
for(rt j=;j<lim;j++)if(__builtin_popcount(j&s)&)ans+=b[j];else ans-=b[j];
if(ans%p){
cout<<n-i;
break;
}
for(rt j=;j<lim;j++)b[j]=1ll*a[j]*b[j]%p;
}
return ;
}
「NowCoder Contest 295」H. Playing games的更多相关文章
- 2018牛客网暑假ACM多校训练赛(第八场)H Playing games 博弈 FWT
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round8-H.html 题目传送门 - https://www.no ...
- H.Playing games
fwt #include<bits/stdc++.h> using namespace std; const int N=1<<19; const int mod=100000 ...
- 「COCI2016/2017 Contest #2」Bruza
「COCI2016/2017 Contest #2」Bruza 解题思路 : 首先对于任意时刻 \(i\) ,硬币一定移动到了深度为 \(i\) 的节点,所以第 \(i\) 时刻 Danel 一定染掉 ...
- 「NOWCODER」CSP-S模拟赛第3场
「NOWCODER」CSP模拟赛第3场 T1 货物收集 题目 考场思路即正解 T2 货物分组 题目 考场思路 题解 60pts 算法:一维 DP 100pts 算法:一维 DP ?线段树 + 单调栈 ...
- Objective-C 实用关键字详解1「面试、工作」看我就 🐒 了 ^_^.
在写项目 或 阅读别人的代码(一些优秀的源码)中,总能发现一些常见的关键字,随着编程经验的积累大部分还是知道是什么意思 的. 相信很多开发者跟我当初一样,只是基本的常用关键字定义属性会使用,但在关键字 ...
- LOJ6003 - 「网络流 24 题」魔术球
原题链接 Description 假设有根柱子,现要按下述规则在这根柱子中依次放入编号为的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法 ...
- LOJ6001 - 「网络流 24 题」太空飞行计划
原题链接 Description 有个实验和个仪器,做实验有报酬买仪器有花费.每个实验都需要一些仪器,求最大净收益(实验报酬仪器花费),并输出一组方案. Solution 实验向所需仪器连边,实验的点 ...
- LOJ6000 - 「网络流 24 题」搭配飞行员
原题链接 题意简述 求二分图的最大匹配. 题解 这里写的是匈牙利算法. 表示节点的当前匹配. 为真表示在这一轮匹配中,无法给节点一个新的匹配.所以如果为真就不用再dfs它了,直接continue就好. ...
- Loj #2331. 「清华集训 2017」某位歌姬的故事
Loj #2331. 「清华集训 2017」某位歌姬的故事 IA 是一名会唱歌的女孩子. IOI2018 就要来了,IA 决定给参赛选手们写一首歌,以表达美好的祝愿.这首歌一共有 \(n\) 个音符, ...
随机推荐
- tensorflow不同版本安装与升级/降级
https://blog.csdn.net/junmuzi/article/details/78357371 首先,可以安装一个anaconda. 然后使用python的pip可以安装特定版本的ten ...
- R语言实现两文件对应行列字符替换(解决正负链统一的问题)
假设存在文件file1.xlsx,其内容如下: 存在文件file2.xlsx,其内容如下: 现在我想从第七列开始,将file2所有的字符替换成file1一样的,即第七.八.九.十列不需要改变,因为fi ...
- 解决plink报错:.bim file has a split chromosome. Use --make-bed by itself to remedy this.
由于plink1.9和1.07这两个版本互掐,经常出现各种不兼容问题,“.bim file has a split chromosome. Use --make-bed by itself to r ...
- (二叉树 BFS) leetcode103. Binary Tree Zigzag Level Order Traversal
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- bzoj2819 DFS序 + LCA + 线段树
https://www.lydsy.com/JudgeOnline/problem.php?id=2819 题意:树上单点修改及区间异或和查询. 思维难度不高,但是题比较硬核. 整体思路是维护每一个结 ...
- 解决openoffice进程异常退出的办法
步骤1 编写脚本 openoffice.sh #!/usr/bin/bash OPENOFFICEPID=`ps -ef|grep "/opt/openoffice4/program/sof ...
- 持续集成CI
一.CI 和 CD 持续集成是什么? 持续集成(Continuous integration,简称CI)指的是,频繁地(一天多次)将代码集成到主干.让产品可以快速迭代,同时还能保持高质量. 持续交付( ...
- OpenStack的基础原理
OpenStack的基础原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集.其 ...
- springboot入门使用
一.什么是springboot,有什么用 springboot是一个开发框架,其出现的目的利用约定大于配置的思想来让开发者摆脱spring繁琐的配置,简化开发.其不是spring框架的替代品,是spr ...
- Hbase记录-Hbase配置项
hbase.tmp.dir:本地文件系统的临时目录,默认是java.io.tmpdir/hbase−java.io.tmpdir/hbase−{user.name}: hbase.rootdir:hb ...