CF837.Div2 A~C


回家的前夜。

第二天要早早起来赶六点的校车,怕睡过了,不敢睡,打算通宵。

发现有CF,那就打吧。


A Hossam and Combinatorics

签到题但是我交了四遍

直接排序然后统计最小的数的个数 $a$ ,最大的数的个数 $b$ ,那么答案就是 $2ab$ 。

注意若序列全是同一个数,那么答案则为 $n(n-1)$ ,这个需要特判一下。

因为快读没有改成 longlong 调了半天。

果然半夜脑子不太好使。


B Hossam and Friends

一道思维题。又交了四遍

直接来统计这个子数列个数感觉不太好搞,于是考虑从反面来入手,首先所有的子数列个数为 $\dfrac{n(n+1)}{2}$ ,考虑根据限制条件来减去不合法的。

首先考虑如果添加了一个限制 $(l,r)$ ,那么不合法的子数列数量应是 $l\times (n-r+1)$ 。

考虑这样的两个限制条件 $(1,5)$ 与 $(2,4)$ ,动手枚举一遍有这两个限制和只有 $(2,4)$ 一个限制是等价的。

所以可以得到一个结论:两个限制条件 $(l_1,r_1)$ 和 $(l_2,r_2)$ ,若 $l_1>l_2$ 且 $r_1<r_2$ ,那么限制 2 则可以被限制 1 覆盖掉,忽略不记。

于是对所有的限制按照 $r$ 从小到大的顺序排序, $r$ 相同的按照 $l$ 从大到小的顺序排序,然后依次处理每个限制。

令 $ml$ 表示已处理过的排序中 $l$ 的最大值。

如果目前处理的限制的 $l$ 小于 $ml$ ,则说明这个限制被前面的覆盖掉了,不对该限制进行处理。

反之的话那么就减去不合法的子数列数量,为 $(l-ml)\times (n-r+1)$ 。

于是这样就可以 $O(m\log m)$ 解决本题。

一开始的思路错了, WA 了三发,然后才逐渐摸索出这个思路。


C Hossam and Trainees

是一个暴力题。然而还是交了四发

简单来说就是判断序列是否两两互质。

那么就预处理出 1e5 范围内的质数,然后对序列依次处理,开一个桶记录有该质因子的数的个数,当桶内的数量大于 1 时输出 YES 。

但是这样的话就有一个问题,我选择处理 1e5 是因为数最大为 1e9, ,于是我便处理到其开方后的大小。那么这样的话假设有一个大于 1e5 的质数 $a$ ,若有两个数 $a,2a$ ,那么我这种方法就歇菜了。因此 WA 了三发

所以对序列依次处理时因将素因子除尽,然后看最后剩下的序列中的数是否有相等的即可。

复杂度不会算。


文章作者: HoshiuZ
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 HoshiuZ !
  目录