2021.01.14【NOIP提高B组】模拟 总结

2021.01.14【NOIP提高B组】模拟 总结

第一题 Candy

奇奇怪怪的题目。
一开始没有理解题目,其实就是同时变换。
打了一个暴力。
本人随机生成50000组数据,都过了,时间没超。希望出题人良心。
应该是结论题,有公式吧。
正解其实就是暴力。
设操作次数为 n n n
可以证明: n ≈   l o g 2 a n\approx\ {log}_2^a n log2a(注: a , b , c a,b,c a,b,c同阶)
题目大意:
给你三元组 ( a , b , c ) \left(a,b,c\right) (a,b,c),每一次操作变成 ( b + c 2 , a + c 2 , a + b 2 ) \left(\frac{b+c}{2},\frac{a+c}{2},\frac{a+b}{2}\right) (2b+c,2a+c,2a+b),问多少次其中一个变为奇数。

第二题 嘟嘟噜

约瑟夫问题,感觉是结论。
或者是二分判断???
打了暴力链表加上 m = 2 m=2 m=2的情况,打表一下找规律即可,可惜没找到 3 3 3的规律。
正解是约瑟夫问题的方法,递归转化问题。
考虑 n , m n,m n,m的情况,用 O ( n ) O(n) O(n)时间复杂度做出。
f n , m f_{n,m} fn,m表示有 n n n个人,报数到 m m m的最后剩下的人。
转移
f n , m = ( f n − 1 , m + m )   m o d      n f_{n,m}=\left(f_{n-1,m}+m\right)\ \mod\ n fn,m=(fn1,m+m) mod n
这样子过不去,考虑 m m m较小时,可以用 O ( m l o g 2 n ) O(m log_2^n) O(mlog2n)的算法。
分类讨论。
证明看

第三题 天才绅士少女助手克里斯蒂娜

维护一个区间向量的神奇操作。
以前做过类似的题目,但是忘了向量乘法的法则。
正解线段树还是树状数组,忘了。
正解是树状数组。
在模长上,向量叉积的几何意义是以两个向量为边的平行四边形的面积。
所以可得(设 a \boldsymbol{a} a b \boldsymbol b b分别为两个向量):
a × b = a 1 b 2 − a 2 b 1 \boldsymbol a\times\boldsymbol b=a_1b_2-a_2b_1 a×b=a1b2a2b1
然后原式变为
∑ i = l r ∑ j = i + 1 r ( x i y j − x j y i ) 2 \begin{aligned}\sum_{i=l}^{r}\sum_{j=i+1}^{r}\left(x_iy_j-x_jy_i\right)^2\end{aligned} i=lrj=i+1r(xiyjxjyi)2
化简得:
( ∑ i = l r x i 2 ) ( ∑ i = l r y i 2 ) − ( ∑ i = l r x i y i ) 2 \begin{aligned}\left(\sum_{i=l}^{r}x_i^2\right)\left(\sum_{i=l}^{r}y_i^2\right)-\left(\sum_{i=l}^{r}{x_iy_i}\right)^2\end{aligned} (i=lrxi2)(i=lryi2)(i=lrxiyi)2
B I T BIT BIT树状数组维护即可,常数不要太大。

第四题 凤凰院凶真

考虑 d p dp dp,设 f i , j f_{i,j} fi,j。然后转移很容易,然后记录前驱。但是这种方法是 O ( n 4 ) O\left(n^4\right) O(n4),可能可以过 n = 400 n=400 n=400的吧( n , m n,m n,m同阶)。
正解也是 d p dp dp吗?看 n , m n,m n,m这么小。
正解是 d p dp dp
f i , j f_{i,j} fi,j表示当 n = i n=i n=i m = j m=j m=j时的答案。
转移就是分类讨论:
a i = b j , f i , j = m a x ( f i − 1 , j , 1 +   max ⁡ 0 ≤ k < j , b k < b j f i − 1 , k ) \begin{aligned}a_i=b_j,f_{i,j}=max\left(f_{i-1,j},1+\ \max_{0\le k<j,b_k<b_j}{f_{i-1,k}}\right)\end{aligned} ai=bjfi,j=max(fi1,j,1+ 0k<j,bk<bjmaxfi1,k)
否则, f i , j = f i − 1 , j f_{i,j}=f_{i-1,j} fi,j=fi1,j
p r e i , j , 0 / 1 pre_{i,j,0/1} prei,j,0/1表示它是由什么转移过来的即可。
优化:
我们枚举j时按从小到大的顺序,然后边更新边把那一坨求出来。时间复杂度 O ( n m ) O\left(nm\right) O(nm)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值