Japanese Student Championship 2019 Qualification
目录
Contest Info
[Practice Link](https://atcoder.jp/contests/jsc2019-qual/tasks)
| Solved | A | B | C | D | E | F |
|---|---|---|---|---|---|---|
| 3/6 | O | O | - | - | Ø | - |
- O 在比赛中通过
- Ø 赛后通过
- ! 尝试了但是失败了
- - 没有尝试
Solutions
A - Takahashi Calendar
签到。
B - Kleene Inversion
题意:
给出一个长度为\(2000\)的序列\(a_i\),现在将它复制\(k\)遍,求复制后的序列的逆序对数量。
思路:
将序列分成\(k\)段,考虑每个数在每一段中的贡献,是一个等差数列。
每个数在它自己段的贡献显然就是它之后有多少个数比它小。
其他段的数对它的贡献就是一段中比它小的个数乘上在它后面的段的段数。
C - Cell Inversion
题意:
有一个长度为\(2n\)的01字符串\(S\),现在需要执行以下操作\(n\)次:
- 选择两个不同的\(i, j\),翻转\(s[i, j]\)中的\(01\)状态
一个点只能被选择一次,也就是说在\(n\)次操作中,每个点都要被选择一次且仅一次。
询问最后全都翻转成\(0\)的方案数
E - Card Collector
题意:
在一个\(h \cdot w\)的矩形上,有\(n\)个位置有数字,现在要求每一行选择一个数,每一列选择一个数,问可以获得的最大权值和。
注意,一行中可能会选出多个数,但是每个数你要钦定它是被行选走还是被列选走,最后被行选走的数每一行只有一个,被列选走的数每一列只有一个。
思路:
将行视为一个点,将列视为一个点。 那么一共有\(h + w\)个点。
那么考虑一个位置上有一个数可以看出两个点之间有一条权值为\(a_i\)的边。
现在要选出一些边,使得权值和最大,并且满足上述要求。
其实这是一个拟阵,我们考虑什么样是独立集?
其实就是在同一个连通块里面的所有点,边数要小于等于点数,因为这样总有办法使得每个点最多分配到一条边。
但是要注意的是,并不是最终连通块里的边数要小于等于点数就好了。
而是要形成连通块的过程要时时刻刻都保持边数小于等于点数。
因为如果过程中某一步已经不满足了,那么这个集合已经不是一个独立集了,不符合拟阵的定义。
然后根据加权拟阵性质,贪心选择即可。

浙公网安备 33010602011771号