BJOI2019部分题解

送别估计是不会写了。勘破神机已填坑。代码就不贴了QAQ

奥术神杖

看到数据范围就会做了。。
∏vic=k⇔∏vi=kc⇔∑log⁡vi=clog⁡k⇔∑log⁡vic=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 kcvi=kvi=kclogvi=clogkclogvi=logk

最大化 ∑log⁡vic\frac {\sum \log v_i} cclogvi ,01分数规划一下,然后在AC自动机上跑dp即可。注意精度问题。
时间复杂度 O(s2∗log⁡)O(s^2*\log )O(s2log)

勘破神机

并不是一道有意思的题。
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(i1)+f(i2) 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(2i2)+2j=1ig(2i2j)g(2i)=4g(2i2)g(2i4)

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=0k(1)kiS1(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=lrF(n,k)=i=lr(kf(i))=k!1j=0k(1)kjS1(k,j)i=lrf(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=0k(1)kjS1(k,j)i=lr(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=0k(1)kjS1(k,j)r=0k(rk)ArBkri=lr(xrykr)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(k2log⁡n)O(k^2\log n)O(k2logn)

排兵布阵

所有对手分开考虑,不难发现每个城堡的士兵数量只可能有 0002x+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=yb1,y=a0+xb2

然后我们可以把两块玻璃合成为一块玻璃,然而合成后的玻璃正反的透射和折射率并不相同,所以只要维护合成玻璃的正面透光率和反面反射率即可。最后合并成一块玻璃输出透光率。

时间复杂度 O(nlog⁡p)O(n\log p)O(nlogp),其中 log⁡p\log plogp 来源于求逆元。

删数

很巧妙的一道题。有这么一个结论,把当前序列中 [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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值