T1.开屏雷击:
Bitset Master
O ( n m ) O(nm) O ( n m ) 暴力。
出题人开了时限6 s 6s 6 s ,然后心机的让m = 3 n m = 3n m = 3 n ,
奈何O ( n m ) O(nm) O ( n m ) 跑过了n = 30000 n = 30000 n = 3 0 0 0 0 的点。O ( n m w + n 2 ) O(\frac {nm}w + n^2) O ( w n m + n 2 ) 算法:
每次合并的时候同时维护一个u u u 被多少个节点v v v 包含。
合并可以用 b i t s e t bitset b i t s e t 优化成O ( n m w ) O(\frac {nm}w) O ( w n m ) ,
合并u , v u,v u , v 时可以考虑求出S ( u ) x o r S ( v ) S(u) xor S(v) S ( u ) x o r S ( v ) 也就是集合中不同的点,然后对这些点维护一个u u u 被多少个节点v v v 包含,总共只会维护O ( n 2 ) O(n^2) O ( n 2 ) 次。O ( m ) O(m) O ( m ) 的解决先做完所有修改再询问的数据点的算法:详见 O ( ( n + m ) log 2 n ) O((n+m)\log^2 n) O ( ( n + m ) log 2 n ) 正解:
这个这个,。。就是就是。。。。
离线分治回答询问,
维护时间点因为总变化量是O ( m ) O(m) O ( m ) 的
所以是需要快速找,暴力修改。
T2:
完全图(要写矩阵快速幂):
if ( m== n* ( n- 1 ) / 2 )
{
mat t; t. a[ 0 ] [ 0 ] = 0 ; t. a[ 0 ] [ 1 ] = P- 1 ; t. a[ 1 ] [ 0 ] = 1 ; t. a[ 1 ] [ 1 ] = n+ 2 ;
t= pw ( t, k) ; int s= t. a[ 1 ] [ 0 ] ;
printf ( "%d\n" , 1ll * pw ( n, n- 2 ) * pw ( s, n- 1 ) % P) ;
return 0 ;
}
n < = 5 n<=5 n < = 5
写B M BM B M
(不知道( n ∗ 100 ) 4 (n*100)^4 ( n ∗ 1 0 0 ) 4 怎么过的。)
下面:
数理知识
笛卡尔积:
说人话:你不需要知道什么是笛卡尔积。
很牛逼,我们又证明了一次某C定理。
这题就是不想让人过的。
resultant:上面的PPT中有,具体就是对特征值的操作什么的。
PS: 如果这个题是复制k k k 个图然后两两对应编号连边就简单多了,只需要求两次行列式即可简单个锤子 。
T3:求∑ x = 1 n lcm ( x , x + 1 , … , x + k ) \sum\limits_{x = 1}^n \textrm{lcm}(x, x + 1, \dots, x + k) x = 1 ∑ n lcm ( x , x + 1 , … , x + k ) 对1 e 9 + 7 1e9+7 1 e 9 + 7 取模的结果。
猜想x ∗ ( x + 1 ) ∗ ⋯ ∗ ( x + k ) x* (x + 1)* \dots*(x + k) x ∗ ( x + 1 ) ∗ ⋯ ∗ ( x + k ) 和lcm ( x , x + 1 , … , x + k ) \textrm{lcm}(x, x + 1, \dots, x + k) lcm ( x , x + 1 , … , x + k ) 有关。
令f ( x ) = x ∗ ( x + 1 ) ∗ ⋯ ∗ ( x + k ) lcm ( x , x + 1 , … , x + k ) f(x) = \frac {x* (x + 1)* \dots*(x + k)}{\textrm{lcm}(x, x + 1, \dots, x + k)} f ( x ) = lcm ( x , x + 1 , … , x + k ) x ∗ ( x + 1 ) ∗ ⋯ ∗ ( x + k ) 容易发现 f ( x ) f(x) f ( x ) 是有周期的。
并且发现16 16 1 6 的周期是720720 720720 7 2 0 7 2 0 ,就可以愉快的拉格朗日插值O ( k 2 ∗ 720720 ) O(k^2*720720) O ( k 2 ∗ 7 2 0 7 2 0 ) 得到70 p t s 70pts 7 0 p t s .
可以O ( k ∗ 720720 ) O(k*720720) O ( k ∗ 7 2 0 7 2 0 )
可以把求答案的式子化成∑ i = 0 n − r L c i ( L ∗ i + r k + 1 ) \sum_{i=0}^{\frac {n-r}L} c_i\binom{L * i + r}{k+1} ∑ i = 0 L n − r c i ( k + 1 L ∗ i + r ) 的形式。
再范德蒙德恒等式:∑ i = 0 n − r L c i ∑ j = 0 i ( L ∗ i j ) ( r k + 1 − j ) = ∑ j = 0 i ( r k + 1 − j ) ∑ i = 0 n − r L c i ( L ∗ i j ) \sum_{i=0}^{\frac {n-r}L} c_i \sum_{j=0}^i \binom{L * i}{j} \binom{r}{k+1-j} = \sum_{j=0}^i \binom{r}{k+1-j}\sum_{i=0}^{\frac {n-r}L} c_i\binom{L * i}{j} ∑ i = 0 L n − r c i ∑ j = 0 i ( j L ∗ i ) ( k + 1 − j r ) = ∑ j = 0 i ( k + 1 − j r ) ∑ i = 0 L n − r c i ( j L ∗ i )
对于这个题n − r L \frac {n-r}L L n − r 只有2个取值,所以预处理后面的Σ \Sigma Σ 然后就可以O ( k ) O(k) O ( k ) 算了。
发现f ( x ) f(x) f ( x ) 的质因数≤ k \leq k ≤ k
猜想:f ( x ) f(x) f ( x ) 中p ( p r i m e ) p(prime) p ( p r i m e ) 的次数和x ( m o d p e ) x\pmod {p^e} x ( m o d p e ) 有关
然后就把1...30 1...30 1 . . . 3 0 的质数分成两组。
然后L L L 就是3 e 5 3e5 3 e 5 的级别,然后双指针套卷积合并组合形式幂级数的式子就可以卡过了。牛逼做法
还需要优化:
如:k = 15 , ( m o d 13 ) k = 15 , \pmod {13} k = 1 5 , ( m o d 1 3 ) 时。
基础贡献加入反例,贡献乘起来,我在复读
就是把x ( m o d p e ) x \pmod {p^e} x ( m o d p e ) 的p e p^e p e 类强行用人类智慧减少讨论范围,k = 25 k=25 k = 2 5 时只有4 e 5 4e5 4 e 5 项容斥系数,可以直接过。
取模卡常小技巧
for
f += a * b
(f>=p^2) && (f -= p^2)
endfor
f %= p;
…
好像。。