送别估计是不会写了。勘破神机已填坑。代码就不贴了QAQ
看到数据范围就会做了。。
∏ v i c = k ⇔ ∏ v i = k c ⇔ ∑ log v i = c log k ⇔ ∑ log v i c = log k \sqrt[c]{\prod v_i}=k\Leftrightarrow \prod v_i=k^c \Leftrightarrow\sum \log v_i=c\log k\Leftrightarrow \frac {\sum \log v_i} {c}=\log k c∏vi=k⇔∏vi=kc⇔∑logvi=clogk⇔c∑logvi=logk
最大化 ∑ log v i c \frac {\sum \log v_i} c c∑logvi ,01分数规划一下,然后在AC自动机上跑dp即可。注意精度问题。
时间复杂度 O ( s 2 ∗ log ) O(s^2*\log ) O(s2∗log)
并不是一道有意思的题。
设 f ( i ) f(i) f(i) 表示宽为 n n n 的2型宝石的方案数, g ( i ) g(i) g(i) 表示宽为 n n n 的3型宝石,那么我们不难得到它的递推式:
f ( i ) = f ( i − 1 ) + f ( i − 2 ) f(i)=f(i-1)+f(i-2) f(i)=f(i−1)+f(i−2) g ( 2 i ) = g ( 2 i − 2 ) + 2 ∑ j = 1 i g ( 2 i − 2 j ) ⇒ g ( 2 i ) = 4 g ( 2 i − 2 ) − g ( 2 i − 4 ) g(2i)=g(2i-2)+2\sum_{j=1}^i g(2i-2j)\Rightarrow g(2i)=4g(2i-2)-g(2i-4) g(2i)=g(2i−2)+2j=1∑ig(2i−2j)⇒g(2i)=4g(2i−2)−g(2i−4)
而
F ( n , k ) = ( f ( n ) k ) , G ( n , k ) = ( g ( n ) k ) F(n,k)=\binom {f(n)} k,G(n,k)=\binom {g(n)} k F(n,k)=(kf(n)),G(n,k)=(kg(n))
因此我们就需要解决一个组合数的求和,注意到 ( n m ) = n m ‾ m ! \binom n m=\frac {n^{\underline m}} {m!} (mn)=m!nm
x k ‾ = ∑ i = 0 k ( − 1 ) k − i S 1 ( k , i ) x i x^{\underline k}=\sum_{i=0}^k (-1)^{k-i}S_1(k,i)x^i xk=i=0∑k(−1)k−iS1(k,i)xi
(1) ∑ i = l r F ( n , k ) = ∑ i = l r ( f ( i ) k ) = 1 k ! ∑ j = 0 k ( − 1 ) k − j S 1 ( k , j ) ∑ i = l r f ( i ) k \sum_{i=l}^r F(n,k)=\sum_{i=l}^r\binom {f(i)} k=\frac 1 {k!}\sum_{j=0}^k (-1)^{k-j} S_1(k,j)\sum_{i=l}^r f(i)^k\tag 1 i=l∑rF(n,k)=i=l∑r(kf(i))=k!1j=0∑k(−1)k−jS1(k,j)i=l∑rf(i)k(1) (2) = 1 k ! ∑ j = 0 k ( − 1 ) k − j S 1 ( k , j ) ∑ i = l r ( A x i + B y i ) k =\frac 1 {k!}\sum_{j=0}^k (-1)^{k-j} S_1(k,j)\sum_{i=l}^r (Ax^i+By^i)^k\tag 2 =k!1j=0∑k(−1)k−jS1(k,j)i=l∑r(Axi+Byi)k(2) (3) = 1 k ! ∑ j = 0 k ( − 1 ) k − j S 1 ( k , j ) ∑ r = 0 k ( k r ) A r B k − r ∑ i = l r ( x r y k − r ) i =\frac 1 {k!}\sum_{j=0}^k (-1)^{k-j} S_1(k,j)\sum_{r=0}^k\binom k r A^rB^{k-r} \sum_{i=l}^r (x^ry^{k-r})^i\tag 3 =k!1j=0∑k(−1)k−jS1(k,j)r=0∑k(rk)ArBk−ri=l∑r(xryk−r)i(3)
我们求出 f ( i ) , g ( i ) f(i),g(i) f(i),g(i) 的通项公式,枚举 j , r j,r j,r,对后面的用等比数列求和。只需要预处理求下降幂的系数即可。
如果模意义下没有二次剩余,可以写个结构体来表示数字 a + b 5 a+b\sqrt 5 a+b5,重载一下运算符就能用。
时间复杂度 O ( k 2 log n ) O(k^2\log n) O(k2logn)。
所有对手分开考虑,不难发现每个城堡的士兵数量只可能有 0 0 0 或 2 x + 1 2x+1 2x+1 两种可能,暴力背包 O ( s n m ) O(snm) O(snm)
挺有意思的一道题。为了方便表述,我们约定玻璃的上表面为正面,下表面为反面,下标同题面。
先考虑只有两块玻璃的情况,我们可以设上面的玻璃的反面总共接受了 x x x 份光,下面玻璃的正面总共接受了 y y y 份光。列出方程即可解: x = y ∗ b 1 , y = a 0 + x ∗ b 2 x=y*b_1,y=a_0+x*b_2 x=y∗b1,y=a0+x∗b2
然后我们可以把两块玻璃合成为一块玻璃,然而合成后的玻璃正反的透射和折射率并不相同,所以只要维护合成玻璃的正面透光率和反面反射率即可。最后合并成一块玻璃输出透光率。
时间复杂度 O ( n log p ) O(n\log p) O(nlogp),其中 log p \log p logp 来源于求逆元。
很巧妙的一道题。有这么一个结论,把当前序列中 [ 1 , n ] [1,n] [1,n] 中的数字画成柱状图,然后把所有柱子向左倒,则 [ 0 , n ] [0,n] [0,n] 中的未被覆盖的长度即为答案。
用线段树维护最小值和其出现次数即可。注意到超出左边界的柱子不会对答案造成影响,我们只对右端点进行加入和删除即可。
时间复杂度 O ( ( n + m ) log n ) O((n+m)\log n) O((n+m)logn)