杂题题解
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\)
显然的想法链表维护,暴力查所有长度\(\geq 50\)的\(hash\),分析一下复杂度是\(O(nk+|S|)\)的,因为本质不同的子串只有\(nk\)
开始取模哈希被卡了,结果写\(ull\)十进制自然溢出就过了(
首先有一个显然的费用流模型
然后可以发现尽量靠后选更优,于是从后往前先求出用堆维护贪心,求出最后一天的答案
然后考虑某一天能选的,前面也能选,所以要求\(i-1\)的答案只需要在这时前面所有已经选了的里面去掉最小的\(m\)个即可
从后往前再递推一次即可
考虑显然把所有高度大于\(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 \(\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)\)做完了,不过我的代码没有优化常数跑的有点慢就是了
二分答案,那么就是和直线距离\(\le k\),可以发现每个点一定是某一段
于是双指针+半平面交即可,可以预先排序一次做到\(O(n^2logn)\)
目前正确的半平面交模板(
code
简单链\(dp\)即可
code
考虑设\(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\)即可
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)\)
观察到每个变量做边一定是链或环
分别DP即可,细节讨论挺恶心的
因为没注意到线性规划要求的是整数解搞到心态爆炸
考虑枚举两个半平面,剩下未覆盖的的点按极角序
每个半平面覆盖一个区间,区间\(dp\)算一下
代码并没有写
由于两种颜色没有本质区别,所以一定是尽量选花费小的
行列建出二分图就是上下界最大流
可以把限制写成线性规划,然后对偶即可
可以网络流所以一定有整数解
大概明白怎么处理多个限制,就把矩阵拼一起
atcoder Keyence Programming Contest 2020 F - Monochromization
考虑从后往前不断删,每次一定是删一些同色行列
记一下剩几行几列以及上一次删了几种颜色,会发现删的颜色一定不增
然后枚举哪些行列留到了最后算一下即可
考虑对每个数计算没出现的情况
就是若干组\(\%p\)下同余\(i\)的不同时出现的情况
只考虑%%p%同余类,出现\(r/p,r/p+1\)两种
对三种情况还有\(0\)分别构造生成函数乘起来即可
又有三元组在范围下本质不同的个数是\(O(\sqrt p)\)的
用\(bsgs\)做一下复杂度就是\(O(\sqrt p n^2)\)
[美团杯2020 版本答案]
记\(f[i][j][0/1][0/1]\)表示攻击方有\(i\)个,另一边\(j\)个,当前这边攻击的有没有一滴血的,对面有没有一滴血的的
然后发现由于巧妙的规则,只有\(f[n][m][0][1]\)转移有二元环,但是收敛的,直接做即可
[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\)次多项式
然后多点求值即可
直接对字符串区间\(dp\)
分拼接和倍数转移即可,好像可以证明复杂度是对的
先令最长的那个放好,考虑剩下的
一个很妙的是所有长度都为整数,将所有线段开头表示成整数+小数的形式的话只需要小数之间的大小关系
于是可以枚举排列,然后就是一个线段覆盖的\(dp\)了
考虑计算一个序列如何合法
考虑存在一个龙最后\(r>b\)
对于\(r=b\)就要强制最后一个\(b,b--\)即可
那么\(r-b\)个龙多一个\(r\),\(n-(r-b)\)个一样
也就是\(n-r+b\)个\(RB\)
也就最多\(b-(n-r+b)=r-n\)个前缀\(b\)
折线法即可