码迷,mamicode.com
首页 > 其他好文 > 详细

Tokio Marine & Nichido Fire Insurance Programming Contest 2020 English

时间:2020-06-28 22:51:38      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:集合   math   inline   rac   block   log   三元   处理   比较   

D

设阈值\(L\),预处理\(i\le L\)的祖先最优背包
对于一次询问,\(i>L\)的部分可以状压

E

显然,题目可以直接转化为\(S=0,T=2^L-1\)\(A_i\in[0,2^T)\)
\(f(U)\)为集合大小\(\in[1,K]\),集合中所有数\(\And U\)相同的个数
\(ans=\sum\limits_{U}(-1)^{popcount(U)}f(U)\)

证明:
考虑对于集合大小\(\in[1,K]\)的集合,被统计了几次
这时\(f(U)的意义可以描述成:\)U$中的位上为\(1\)时是否集合上该位相同,剩下的比较显然了

考虑如何计算\(f(U)\),枚举每个\(U\),然后\(O(N)\)遍历\(a_i\)
\(O(2^LN)\)

没有用到任何高级算法,非常巧妙!!

令一种稍劣的方法
\(S=0,T=2^L-1\)的意义在于,选择的集合每一位出现过\(0\)\(1\)
固定集合内的一个元素,然后要做的事就变成:找到一个集合,使得集合中的位出现过某个数字,可以通过fwt配合容斥解决

具体来说,现在的问题可以描述成选择一个集合,其与为\(0\)
\(f(U)\)\(a_i\And U=U\)的个数,令\(g(i)=\sum\limits_{j=0}^{k-1}{i\choose j}\)\(\sum\limits_{U}(-1)^{popcount(U)}g(f(U))\)
证明同上

\(O(n\cdot L2^L)\)

F

不失一般性地,我们来统计\((0,i),(j,0)(W,k)(i\le k)\)
\(d=k-i\)

由毕克定理,三角形内部点数\(A\),边界上点数\(B\),三角形面积\(S\),有

\[2S=2A+B-2 \]

整理

\[\begin{aligned} &(2i+d)W?ij?(W?j)(i+d)=2A+(i,j)+(W,d)+(W?j,i+d)?2\&iW?(i,j)?(W?j,i+d)=2A+(W,d)?2?dj\\end{aligned}\]

需要计算三元组\((i,j,d)\)的个数,其满足:\(iW?(i,j)?(W?j,i+d)\le 2K+(W,d)?2?dj\)
固定\((j,d)\),右侧是定值,令其为\(R\)
由于\((i,j)+(W?j,i+d)\le W\),当\(i\le \frac{R}{W}\)时恒满足,\(i\ge \frac{R}{W}+1\)时恒不满足
仅需格外计算\(i=\frac{R}{W}+1\)即可

\((j,d)\)使得\(R\ge 0\)的个数\(O((K+W)log(K+W))\)

Tokio Marine & Nichido Fire Insurance Programming Contest 2020 English

标签:集合   math   inline   rac   block   log   三元   处理   比较   

原文地址:https://www.cnblogs.com/Grice/p/13199865.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!