期望得分:(20+?)+20+50
实际得分:50+20+20
rk:25
考得很惨,考试的时候满脑子刀剑
A. 次芝麻
没思路,只会循环节暴力。造了数据发现出循环节的概率还是很高的。
每次暴力都打不彻底,只判了回到最开始的循环节,所以只有50分。
可以用hash表或者map离散,记录每个数的上次出现位置,这样就能拿到70分。
正解:把每次操作视为x2,放在模(n+m)意义下,发现就是个快速幂!
假设a,b且a<b,操作一次后为a*2,b-a
放在模意义下,假设b*2%(a+b)=(b-a)%(a+b)成立
根据同余同加性(2a+2b)%(a+b)=(a+b)%(a+b),0=0成立。
假设成立。
B. 喝喝喝
坏点:$a_x mod a_y=K \a_x-K=t a_y $
即$a_y$是$a_x-K$的约数,用桶扫一边就能得到前一个和它构成坏点的位置,记为pre[i]
注意$a_y>K$才可计入,或者在更新$a_x-K$时考虑
连续子数组就是区间
那么一个不存在坏点的区间的充要条件就是$pre[i]<l , forall iin [l,r]$
对于每个l,二分出最小的满足上述条件的r,每个以l为左端点[l,r]的子区间都满足要求,贡献为二分长度。
用st表维护区间最大值即可。
复杂度$Theta(n sqrt{n} + nlogn)$
打着题解觉得这好像有单调性,用单调指针能够解决。
复杂度$Theta(n sqrt{n})$