Tokio Marine & Nichido Fire Insurance Programming Contest 2020 English
Posted grice
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tokio Marine & Nichido Fire Insurance Programming Contest 2020 English相关的知识,希望对你有一定的参考价值。
D
设阈值(L),预处理(ile L)的祖先最优背包
对于一次询问,(i>L)的部分可以状压
E
显然,题目可以直接转化为(S=0,T=2^L-1),(A_iin[0,2^T))
令(f(U))为集合大小(in[1,K]),集合中所有数(And U)相同的个数
(ans=sumlimits_{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_iAnd U=U)的个数,令(g(i)=sumlimits_{j=0}^{k-1}{ichoose j}),(sumlimits_{U}(-1)^{popcount(U)}g(f(U)))
证明同上
(O(ncdot L2^L))
F
不失一般性地,我们来统计((0,i),(j,0)(W,k)(ile k))
令(d=k-i)
由毕克定理,三角形内部点数(A),边界上点数(B),三角形面积(S),有
整理
需要计算三元组((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),当(ile frac{R}{W})时恒满足,(ige frac{R}{W}+1)时恒不满足
仅需格外计算(i=frac{R}{W}+1)即可
((j,d))使得(Rge 0)的个数(O((K+W)log(K+W)))
以上是关于Tokio Marine & Nichido Fire Insurance Programming Contest 2020 English的主要内容,如果未能解决你的问题,请参考以下文章
Tokio Marine & Nichido Fire Insurance Programming Contest 2021(AtCoder Regular Contest 122) 题解(代