Codeforces Round #708 (Div. 2) 实录

【C】

简单版本直接构造

n的情况呢

如果核心思想不变

我们的策略就是尽量让ai相同

相同的ai就相当于吸收了

 

 

【D】

感觉题面理解得不舒服

走人

【E】

注意ai的10^7这个不寻常的取值范围

应该从这里入手

ai^2<=10^14

然后再开根号。。因为是i^2的个数

于是最多10^7个这样的数字

预处理

或者从质因数分解的角度思考

一个连读段内无完全平方,

意味着至少存在一个质因数

——

 

等等

一个连续段内无完全平方 这一点是单调的

 

把段不断扩展,达成条件的希望越低

因此固定左端点后,可以尽力扩展右端点

只剩check的问题

对每个质因数,

一个连读段内无完全平方,

任意ai*aj上,存在相应的质因数指标之和为奇数

也即是说,对每个ai的每个质因数指标%2后,

形成二进制串

任意ai*aj 的二进制串 异或后不为零

对每个二进制串,能与其异或为零的数是唯一的,就是它本身

也就是说,每个ai的二进制串都不相同,可以考虑hash处理。

然后利用Map添加或删除。完美!

对每个ai,找出这样的数,在数组的在其右边的第一次位置

然后双指针 标记 添加 或 撤销

10^7 内素数 个数

sqrt(10^7)+n 大小

二进制串长度太长

可以用Bitset

 

这个思路被我玩坏了。。

那就玩新的~

单调性依然是有用的

所谓的平方 嗯。。

首先,如果对于ai来说,没有别的

a能与它乘出一个平方数,那么ai划分在哪一个数组中都无关紧要

 

奇怪的数据范围?根号!?

分块!

我们先考虑那些平方——

两个一样的数也不能放在一起。。

枚举会产生次方,但是底数如果不是N呢?

比如我们对所有<=sqrt(10^7)的a的进行配对的枚举

check 每个ai的平方数的配子

然后 对于>sqrt(10^7)的a

——

emm这样不能把数量限制在根号上

 

感觉一定范围内一定会出现平方数啊。。

因为不产生平方数,每次就得

暴力做。就像上次那样?!

 

unrated了,下班

posted @ 2021-03-18 00:41  AngelKnows  阅读(67)  评论(0)    收藏  举报