奇奇怪怪的题目。
一开始没有理解题目,其实就是同时变换。
打了一个暴力。
本人随机生成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=(fn−1,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=a1b2−a2b1
然后原式变为
∑ 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=l∑rj=i+1∑r(xiyj−xjyi)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=l∑rxi2)(i=l∑ryi2)−(i=l∑rxiyi)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
否则, f i , j = f i − 1 , j f_{i,j}=f_{i-1,j} fi,j=fi−1,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)。