09-01 NOIP模拟测试34

期望得分:(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})$

原文地址:https://www.cnblogs.com/hzoi-yzh/p/11452265.html