标签:原图 frac 训练 0804 sum 0801 复杂度 prod Challenge
这几天做了几道codechef上的题
白天听冬令营,晚上练2道题
0801
A是 Codechef April Challenge 2018 Chef at the Food Fair
发现是\(p_i*=x\) 但是却要求\((1-p_i)\)的积不太好做
于是看到乘积形式果断取\(ln\)转成维护区间和最后\(exp\)回去
发现\(ln(1-x)=-\sum_{i=1}^{\infty}\frac{x^i}{i}\)
再发现\(p<=0.9\)
于是只需要维护前\(100\)项即可
时间复杂度是\(O(100nlogn)\)
B是 Codechef July Challenge 2020 Weird Product
发现这个\(x\)的幂次是随下标逐渐\(+1\)果断考虑前缀和
记\(sum_i=\sum_{j=1}^{i}a_j*x^j\)
于是\(w(l,r)=x^{-2*l}*(sum_r-sum_{l-1})\)
于是只需要求\(\prod_{i=1}^n \prod_{j=i}^n -(sum_j-sum_{i-1})*(sum_{i-1}-sum_j)\)
即只需要求\(\prod_{i=0}^n \prod_{j!=i}(sum_i-sum_j)\)
记\(f(x)=\prod_{i=0}^n(x-sum_i)\)
于是对于每一个\(i\)我们就是求\(\frac{f(x)}{x-sum_i}\)在\(x=sum_i\)处的点值
用一下洛必达法则我们发现其实就是求
\(f'(x)\)在\(sum_0\)到\(sum_n\)处的点值
写一个多项式多点求值即可
时间复杂度是\(O(nlog^2n)\)
0802
A是Codechef July Challenge 2020 Expected Repetitions
p是整个串的贡献最后加上去
发现两个前缀\(i\)和\(j(i<j)\)的贡献为\((j-i)*lcs(i,j)\)
于是直接后缀树上线段树合并维护一下答案就好了
类似的有一个SA+CDQ+单调栈的做法
但由于前几天写过类似的题就写的SAM的做法
时间复杂度是\(O(nlogn)\)
B是Codechef July Challenge 2020 Expected Spanning Trees
不难发现可以对每棵生成树分开计算
看到操作序列考虑EGF
不难发现一条在原图中出现的边最后在原图中依然出现的EGF是
\(\sum_{i=0}^{\infty}\frac {x^{2i}} {i!}=\frac{e^x+e^{-x}}{2}\)
同样的一条不在原图中出现的边最后在原图中出现的EGF是
\(\sum_{i=0}^{\infty}\frac {x^{2i+1}} {i!}=\frac{e^x-e^{-x}}{2}\)
于是只需要对于\(i\)从\(0\)到\(n-1\)统计一下有\(i\)条边在原图中出现的生成树个数
这个是常见套路变元矩阵树+高斯消元\(O(n^4)\)解决
于是对于所有有\(i\)条边在原图中出现过的生成树他们的贡献是相同的
生成函数是\([\frac{e^x+e^{-x}}{2}]^{i} [\frac{e^x-e^{-x}}{2}]^{n-1-i}\)
类似「ZJOI2019」开关 的做法
我们把它写成\(\sum_{i}a_i*e^{ix}\)的形式
把\(n\)个式子乘上生成树个数合并起来
每次询问对每个\(e^{ix}\)次方快速幂一下算贡献
我们得到了\(O(n^4+nqlogmod)\)的做法
但这样太慢了好像过不了怎么办(其实能过)
光速幂!
时间复杂度降为\(O(n^4+n(\sqrt{mod}+q))\)
0803
标签:原图,frac,训练,0804,sum,0801,复杂度,prod,Challenge 来源: https://www.cnblogs.com/deaf/p/13493120.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。