杂题题解

loj 6713 狄利克雷k次根
考虑构造狄利克雷多项式\(DGF:\)
\(f(x)=\sum_{i\geq 1}f_ii^x\)
可以发现这样卷积即为狄利克雷卷积
考虑\(\ln,\exp\)
\(ln\)即要求\(\int\frac{f'}{f}\)
考虑求导,对\(DGF\)求导可得\(f'=\sum_{i\geq 1}f_ii^x\ln(i)\)
但是模意义下没有\(ln\),只能找一个满足\(p(x)+p(y)=p(x+y)\)的函数,可以设为质因子个数
这样就可以做\(ln\),至于\(\exp\),\(e^f=g,g'=g*f\)然后递推即可
或者不需要管\(\ln,\exp,\)直接\(f^k=g,f'*g=\frac 1 k g'*f\)其实本质是一个东西,不过没有显式的描述\(\ln,\exp\)

code


loj 2303 蚯蚓排队

显然的想法链表维护,暴力查所有长度\(\geq 50\)\(hash\),分析一下复杂度是\(O(nk+|S|)\)的,因为本质不同的子串只有\(nk\)
开始取模哈希被卡了,结果写\(ull\)十进制自然溢出就过了(

code


loj2306 蔬菜

首先有一个显然的费用流模型
然后可以发现尽量靠后选更优,于是从后往前先求出用堆维护贪心,求出最后一天的答案
然后考虑某一天能选的,前面也能选,所以要求\(i-1\)的答案只需要在这时前面所有已经选了的里面去掉最小的\(m\)个即可
从后往前再递推一次即可

code


loj#2087 国王饮水记

考虑显然把所有高度大于\(h[1]\)的排序,
然后可以得到一个式子,\(f[j][i]=\max_k(\frac{f[j-1][k]+s_i-s_k}{i-k+1})\)
这个推一下似乎没法直接斜率优化
但是可以看做所有\((k-1,s_k-f[j-1][k])\)\((i,s_i)\)中斜率最大的
\(s_i/i\)是递增的,所以可以仍然单调队列维护下凸壳
可以记录转移点最后再用高精做一次即可
code

另外可以得到的结论是显然区间长度不增,由于\(h\)不同
所以长度不为1的区间只有\(\log nh\)个,证明可以看这个
所以只需要\(dp\)大约\(14\)层即可


loj 519

先离散化
离线下来可回退化并查集+值域分块,散块内查一下是否在一个集合
虽然理论上貌似块开小更快但由于卡空间需要开大,实际似乎大点也更优

code


[loj \(\beta\) round 4]

由于实际是云做题,所以前四道代码都没写(
\(A:\)由于互不相同只需要看X数量奇偶即可
\(B:\)\(k\)不是质数,由广义欧拉定理得\(\prod_{i}(x-i)\equiv x^{2*\phi(k)}-x^{\phi(k)}\mod k\)
\(C:\)直接最大团即可,实际可以发现补集中有边存在必要条件为奇偶不同,所以为二分图,独立集\(=n-\)最大匹配
\(D:\)按对角线做,\(bit\)维护
\(E:\)简单莫反得\(ans=\sum_{T=1}^{\min(n,m)}\frac n T\frac m Tf(T)\)
\(f(n)\sum_{d|n}\mu^2(d)\mu(\frac n d)\)
考虑证明\(\sum_{i=1}^nf(i)=\sum_{i=1}^{\sqrt n}\mu(i):\)
\(p(n)=\max_{d^2|n}d\)
\(\sum_{i=1}^nf(i)=\sum_{i=1}^n\sum_{d|i}[p(d)=1]\mu(\frac i d)\)
\(=\sum_{i=1}^n\sum_{k^2|i}\mu(k)\sum_{d|\frac{i^2}{k}}\mu(\frac{i}{dk^2})\)
\(=\sum_{i=1}^n\sum_{k^2|i}\mu(k)[i=k^2]\)
\(=\sum_{i=1}^n\mu(k)[k^2=i]=\sum_{i=1}^{\sqrt n}\mu(i)\)
中间两次\(\mu\)容斥转换,然后就\(O(\sqrt n)\)做完了,不过我的代码没有优化常数跑的有点慢就是了

code


cf 696 F

二分答案,那么就是和直线距离\(\le k\),可以发现每个点一定是某一段
于是双指针+半平面交即可,可以预先排序一次做到\(O(n^2logn)\)
目前正确的半平面交模板(
code


cf 704 B

简单链\(dp\)即可
code


cf 1349 D

考虑设\(E_i\)表示最后恰好是\(i\)结束的期望,\(E'_i\)表示强制只在\(i\)才结束的期望,\(P_i\)表示在\(i\)结束的概率,\(C\)为所有点从都在一个走到另一个的期望
那么\(E_i=E_i'-\sum_{j\not=i}(p_jC+E_j)\rightarrow n \sum_i E_i=\sum_i E'_i-(n-1)C\)
然后考虑\(E'_i\)怎么求,显然可以手动消元,但是会出现除\(0\)的情况
一个方法是对\(f_i=E'_{i+1}-E_i\)即差分消元

复杂度\(O(n)\)
code


信息传递

考虑原来的分成\(i\)个大小为\(j\)的方案即\([gcd(ij,n)=i](i-1)!j^{i-1}\)
然后每个大小的\(\exp\)即可

code


cf1025G Company Acquisitions
考虑这样一个东西,设有\(j\)个点的权值为\(2^j-1\)
考虑每次合并两个,可以得到期望权值一定会\(+1\),而最后是\(2^{n-1}-1\)
代码懒得放了


反回文串

考虑一个长度为\(k\)的循环节可以唯一表示一个置换下的回文字符串,而这串有\(k\)种,且这个循环节为回文
但是对于偶数存在两个最小回文循环节,即\(s1+s2,s2^r+s1^r\),贡献分别记做\(g=k/2\)即可
\(f,F\)分别为大小为\(i\)的循环节/回文串个数
那么有\(F_n=\sum_{d|n}f_d\)
\(ans=\sum_{d|n}f_dg_d=\sum_{d|n}\sum_{k|d}\mu(\frac d k)F(k)g_d\)
\(=\sum_{k|n}F_k\sum_{d|\frac n k})\mu(d)g(kd)\)
考虑\(g(kd)\not=dg(k)\)只有\(k\)\(d\)偶的时候,此时\(\frac n k\)为偶
但对于\(\frac n k\)\(k\)奇的情况,\(d\)奇偶一一对应,贡献为0
\(ans=\sum_{k|n}f_kg_k\sum_{d|\frac n k}\mu(d)d\)\(pollard-rho\)分解质因子后\(dfs\)
后面\(d\mu(d)\)就是一个质因子贡献为\((1-p_i)\)

code


cf 704C Black Widow

观察到每个变量做边一定是链或环
分别DP即可,细节讨论挺恶心的

code


文学

因为没注意到线性规划要求的是整数解搞到心态爆炸
考虑枚举两个半平面,剩下未覆盖的的点按极角序
每个半平面覆盖一个区间,区间\(dp\)算一下

代码并没有写


CF704D Captain America

由于两种颜色没有本质区别,所以一定是尽量选花费小的
行列建出二分图就是上下界最大流

code


CF708D Incorrect Flow

可以把限制写成线性规划,然后对偶即可
可以网络流所以一定有整数解
大概明白怎么处理多个限制,就把矩阵拼一起

code


atcoder Keyence Programming Contest 2020 F - Monochromization

考虑从后往前不断删,每次一定是删一些同色行列
记一下剩几行几列以及上一次删了几种颜色,会发现删的颜色一定不增
然后枚举哪些行列留到了最后算一下即可

code


口袋里的纸飞机

考虑对每个数计算没出现的情况
就是若干组\(\%p\)下同余\(i\)的不同时出现的情况
只考虑%%p%同余类,出现\(r/p,r/p+1\)两种
对三种情况还有\(0\)分别构造生成函数乘起来即可
又有三元组在范围下本质不同的个数是\(O(\sqrt p)\)
\(bsgs\)做一下复杂度就是\(O(\sqrt p n^2)\)

code


[美团杯2020 版本答案]
\(f[i][j][0/1][0/1]\)表示攻击方有\(i\)个,另一边\(j\)个,当前这边攻击的有没有一滴血的,对面有没有一滴血的的
然后发现由于巧妙的规则,只有\(f[n][m][0][1]\)转移有二元环,但是收敛的,直接做即可

code


[ldx 教育我的一道题]

给定\(f(x),q\)多次询问\(\sum_{i=1}^nf(i)q^i\)\(deg(f)\le 1e5,query\le 1e5\)
\(ans=\sum_{j=0}^kf_j\sum_{i=0}^ni^jq^i\)
考虑算后面的\(\sum_{k=0}^nk^jq^k\)
\(=[x^k]\sum_{i=0}^nq^i\sum_{j=0}^{\infty}i^jx^j\)
\(=[x^k]\frac{1-(qe^x)^{n+1}}{1-qe^x}\),这坨多项式设成\(g\)
回到原式可以看做\([x^k]f^R(x)*g(x)=(f^R(x)*\frac{1}{1-qe^x}*)(1-(qe^x)^{n+1})\)
如果先乘前面,可以看做\(n+1\)\(k\)次多项式
然后多点求值即可


AGC020E Encoding Subsets

直接对字符串区间\(dp\)
分拼接和倍数转移即可,好像可以证明复杂度是对的

code


AGC020F Arcs on a Circle

先令最长的那个放好,考虑剩下的
一个很妙的是所有长度都为整数,将所有线段开头表示成整数+小数的形式的话只需要小数之间的大小关系
于是可以枚举排列,然后就是一个线段覆盖的\(dp\)

code


AGC021E Ball Eat Chameleons

考虑计算一个序列如何合法
考虑存在一个龙最后\(r>b\)
对于\(r=b\)就要强制最后一个\(b,b--\)即可
那么\(r-b\)个龙多一个\(r\),\(n-(r-b)\)个一样
也就是\(n-r+b\)\(RB\)
也就最多\(b-(n-r+b)=r-n\)个前缀\(b\)
折线法即可

posted @ 2020-05-11 22:13  神山识  阅读(244)  评论(0)    收藏  举报