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了,下班
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号