AtCoder ABC 215 简要题解
A - B
模拟
C
可以直接爆搜,也可以写逐位确定的多项式复杂度算法,使用多重组合式求随意乱排的方案数。
D
首先对 \(A\) 所有数暴力分解质因数,然后把遇到过的质因数打上标记。
接下来再对 \(1 \sim m\) 暴力枚举然后分解质因数 \(\rm check\) 即可,复杂度 \(\mathcal{O}((n + m) \sqrt{W})\)。
E
看错题耽误了半小时。。。直接状压:令 \(f_{i, j, S}\) 表示当前考虑到第 \(i\) 位上一个选出来的比赛为 \(j\),当前已经选出的比赛二进制压位后为 \(S\) 的方案数。
转移显然,复杂度 \(\mathcal{O}(10n2 ^ {10})\)。
F
二分答案,问题转变为是否存在一对点对 \(x, y\) 坐标之差均 \(\ge mid\)。
首先将所有点按照 \(x\) 坐标排序,考虑 \((i, j)(i < j)\) 这个点对是否合法在 \(j\) 处统计。
那么对于 \(j\) 可行的 \(i\) 是一段前缀,我们维护这段前缀 \(y\) 的最大最小值即可判断。
注意到随 \(j\) 递增可行的前缀不减,于是可以双指针扫过来,复杂度 \(\mathcal{O}(n (\log W + \log n))\)。
G
根据期望的线性性,我们考虑每种颜色对答案的贡献。
可以发现贡献只与颜色出现次数有关,注意到本质不同的出现次数只有 \(\sqrt{n}\) 个,于是我们把出现次数相同的颜色一起计算贡献,复杂度 \(\mathcal{O}(n \sqrt{n})\)。
貌似题解还有 \(\mathcal{O}(n \mathrm{Poly}(\log n))\) 的做法,不会 \(\rm PGF\) 先鸽。。。
H
首先考虑什么情况是合法的。
容易扩展 \(\rm Hall\) 定律得到局面合法当且仅当:\(\forall S \in V_b, \sum\limits_{i \in S} b_i \le |\bigcup\limits_{i \in S, c_{j, i} = 1} a_j|\)(写的不是很严谨,右侧是所对应集合 \(a\) 的和)。
由于 \(m\) 很大 \(n\) 很小,因此我们考虑枚举右边的集合 \(T\),那么就要求出左边有那些集合 \(S\) 出边构成的并集恰为 \(T\),设为 \(P_T\),那么不难得到第一问答案为:
\]
不难观察得:取到最大值的集合 \(S \in P_T\) 一定是 \(P_T\) 内所有集合的并,因此就不需要枚举所有集合 \(S \in P_T\) 了,只需要求出所有 \(P_T\) 内集合的并 \(P_T'\) 即可,那么可将答案改写为:
\]
同时继续观察可以发现:我们可以放宽条件使得答案依然不变(令 \(s_j\) 为 \(j\) 这个公司可以接受的菜品压位构成的二进制数):
\]
于是我们只需 \(\forall S, \mathrm{count} : f_S = \sum\limits_{i = 1} ^ m [s_i \subseteq S] b_i\) 即可计算得出第一问的答案。
那么我们直接令 \(g_{S} = \sum\limits_{i = 1} ^ m [s_i = S] b_i\),这个可以 \(\mathcal{O}(m)\) 简单得到,然后做一边子集和(高维前缀和)即可,复杂度 \(\mathcal{O}(n2 ^ n)\)。
接下来考虑第二问,根据第一问可以得知,问题显然可以转化为:
- 有 \(n\) 种物品,第 \(i\) 种物品有 \(a_i\) 个,所有物品之间(包括同种物品)有标号,接下来需要从中取出 \(m\) 个元素,接下来给出 \(k\) 个集合,要求选取出的所有元素至少完整地被一个集合包含,求方案数。
考虑容斥,计算得到不合法的方案数。
首先不难得到一个朴素的 \(\rm dp\) 方法,令 \(f_{i, j}\) 表示考虑完前 \(i\) 个集合,当前集合的交集为 \(j\) 的容斥系数之和。
转移显然,复杂度 \(\mathcal{O}(4 ^ n)\),不能接受。
可以发现,问题在于如何快速地得到选出若干个集合并集恰好为 \(S\) 的容斥系数之和。
对此,我们考虑使用 另一个容斥来求出此容斥系数之和。
具体地,我们令 \(g_S\) 为钦定选出若干个集合并集至少为 \(S\) 的方案,那么有(令给出的集合为 \(T_{1, 2, \cdots k}\)):
\]
为了求 \(g\),我们考虑直接计算得到:
\]
然后得到 \(g\) 的方法显然,对于此我们做一边超集和(高维后缀和),复杂度 \(\mathcal{O}(n2 ^ n)\)。
那么就满足二项式反演的集合形式,令 \(f\) 为恰好的方案,根据二项式反演易得:
\]
容易发现这是一个异或卷积的形式,直接做 \(\rm FWT\) 即可,复杂度 \(\mathcal{O}(n2 ^ n)\)。
当然你也可以不写 \(\rm FWT\),我们将 \((-1) ^ {|S|}\) 提出最后乘上去,那么后者也是一个超集和,可以直接计算。
那么最终第二问的答案为:
\]
总体复杂度 \(\mathcal{O}(nm + n2 ^ n)\)。
AtCoder ABC 215 简要题解的更多相关文章
- AtCoder ExaWizards 2019 简要题解
AtCoder ExaWizards 2019 简要题解 Tags:题解 link:https://atcoder.jp/contests/exawizards2019 很水的一场ARC啊,随随便便就 ...
- AtCoder ABC 242 题解
AtCoder ABC 242 题解 A T-shirt 排名前 \(A\) 可得 T-shirt 排名 \([A+1,B]\) 中随机选 \(C\) 个得 T-shirt 给出排名 \(X\) ,求 ...
- AtCoder Beginner Contest 184 题解
AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...
- Noip 2014酱油记+简要题解
好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...
- Tsinghua 2018 DSA PA2简要题解
反正没时间写,先把简要题解(嘴巴A题)都给他写了记录一下. upd:任务倒是完成了,我也自闭了. CST2018 2-1 Meteorites: 乘法版的石子合并,堆 + 高精度. 写起来有点烦貌似. ...
- Codeforces 863 简要题解
文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 简要题解?因为最后一题太毒不想写了所以其实是部分题解... A题 传送门 题意简述:给你一个数,问你能不能通过加前导000使其成为一个回文数 ...
- HNOI2018简要题解
HNOI2018简要题解 D1T1 寻宝游戏 题意 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为 ...
- JXOI2018简要题解
JXOI2018简要题解 T1 排序问题 题意 九条可怜是一个热爱思考的女孩子. 九条可怜最近正在研究各种排序的性质,她发现了一种很有趣的排序方法: Gobo sort ! Gobo sort 的算法 ...
- BJOI2018简要题解
BJOI2018简要题解 D1T1 二进制 题意 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数.他想研究对于二进制,是否也有类似的性质. 于是他生 ...
随机推荐
- Codeforces 931D:Peculiar apple-tree
D. Peculiar apple-tree time limit per test : 1 second memory limit per test : 256 megabytes input : ...
- Centos 切换中文输入法
切换输入法看起来是一个非常简单的操作,但是对于初学者来说,也并非那么简单,开始会发现按Ctrl+space无法切换中文输入法,原因是系统没有安装中文输入法,运行以下命令可以安装中文输入法: yum i ...
- uniCloud爬虫获取网页数据
'use strict'; let request = require('request') let cheerio = require('cheerio'); //爬虫 let iconv = re ...
- 数据可视化 gojs 简单使用介绍
目录 1. gojs 简介 2. gojs 应用场景 3. 为什么选用 gojs: 4. gojs 上手指南 5. 小技巧(非常实用哦) 6. 实践:实现节点分组关系可视化交互图 最后 本文是关于如何 ...
- Java初学者作业——计算大庆路小学的面积练习
返回本章节 返回作业目录 需求说明: 大庆路小学因为装修需要对教室的一侧墙面进行重新粉刷,墙面安装了一面黑板,墙面的长和高以及黑板的长和高. 请编写Java程序计算出需要粉刷的墙面面积.功能要求:输入 ...
- Ubuntu安装Rocksdb并调试
前言 第一次写博客^_^ 系统是全新的Ubuntu20.04,什么都没有,一切从头开始安装 查看gcc和g++版本 sudo apt-get update gcc --version g++ --ve ...
- CSS 基础 选择器的使用汇总
1.后代选择器 html 结构 <div class='father'> <p>小哥哥 小姐姐</p> <div> <p>小帅锅</p ...
- oracle 之 for循环表
代码 create table tm_lzh as SELECT 'a1' c1,'b1' c2 FROM dual union all SELECT 'a2' c1,'b2' c2 FROM dua ...
- MySQL 开启和关闭远程访问
MySQL 开启和关闭远程访问权限 一.开启MySQL/MariaDB的远程访问权限 [root@localhost ~]# mysql -u root -p MariaDB [(none)]> ...
- c# - 常量定义与赋值
1.前言 c#与Java很相似,但是不一样,又与js(JavaScript)相似,但是也不一样,所以我认为c#是Java和 js的孩子. 2.常量定义 字符串: const string = &quo ...