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