09-01 NOIP模拟测试34

指望得分:(20+?)+20+50数组

实际得分:50+20+20ui

rk:25spa

 

考得很惨,考试的时候满脑子刀剑指针

 

A. 次芝麻

没思路,只会循环节暴力。造了数据发现出循环节的几率仍是很高的。hash

每次暴力都打不完全,只判了回到最开始的循环节,因此只有50分。class

能够用hash表或者map离散,记录每一个数的上次出现位置,这样就能拿到70分。循环

正解:把每次操做视为x2,放在模(n+m)意义下,发现就是个快速幂!map

假设a,b且a<b,操做一次后为a*2,b-a数据

放在模意义下,假设b*2%(a+b)=(b-a)%(a+b)成立co

根据同余同加性(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 i\in [l,r]$

对于每一个l,二分出最小的知足上述条件的r,每一个以l为左端点[l,r]的子区间都知足要求,贡献为二分长度。

用st表维护区间最大值便可。

复杂度$\Theta(n \sqrt{n} + nlogn)$

 

打着题解以为这好像有单调性,用单调指针可以解决。

复杂度$\Theta(n \sqrt{n})$

相关文章
相关标签/搜索