回家的前夜。
第二天要早早起来赶六点的校车,怕睡过了,不敢睡,打算通宵。
发现有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 了三发
所以对序列依次处理时因将素因子除尽,然后看最后剩下的序列中的数是否有相等的即可。
复杂度不会算。