NOIol21-1 题解
今年比去年难多了!xml 没有任何长进 难过子
T1. 愤怒的小 N
第二部分没调出来,但是先把推的记录一下免得以后找不着:
结论 1: 2k−1∑i=0,cnt(i)&1ip=2k−1∑i=0,cnt(i)&1=0ip
ans=12n−1∑i=0(1−(−1)cnt(i))f(i)
第一部分:
n−1∑i=0f(i)=k−1∑i=0ain−1∑j=0ji
设 Si(n)=n−1∑j=0ji
Si+1(n)=n−1∑j=0(j+1)i+1−ni+1=n−1∑j=0i+1∑c=0(i+1c)jc−ni+1=i+1∑c=0(i+1c)Sc(n)−ni+1=Si+1(n)+(i+1)Si(n)+i−1∑c=0(i+1c)Sc(n)−ni+1所以 Si(n)=ni+1−i−1∑c=0(i+1c)Sc(n)i+1 这部分可以 O(K2) 计算。
结论 2: 形如 2n−1∑i=0(−1)cnt(i)ik 在 n>k 时 =0。
证明:看作 n 元集合在里面任意选,第 i 个元素的权值是 2i。一种物品集合 t 的系数是 2n−1∑s≥0,t⊆s(−1)cnt(s),显然这个东西只在 t=2n−1 时不等于 0。而 n>k 就意味着 t 不可能为全集。
第二部分:
n−1∑i=0(−1)cnt(i)f(i)=k−1∑i=0ain−1∑j=0(−1)cnt(j)ji=k−1∑i=0ain−1∑j=0,nj=1(−1)cnt(T)2j−1∑l=0(−1)cnt(l)(T+l)jT=n−1∑o=j(str[o]−‘0′)∗2o−j+1。二项式展开
=k−1∑i=0ain−1∑j=0,nj=1(−1)cnt(T)i∑l=0(il)Tl(2j−1∑p=0(−1)cnt(p)pj−l)后面那坨设它等于 sum(j,i−l)
sum(i,j)=sum(i−1,j)−j∑p=0(jp)(2i−1)psum(i−1,j−p)根据结论 2,
n−1∑i=0(−1)cnt(i)f(i)=k−1∑i=0min(k,n)−1∑j=0(−1)cnt(T)i∑l=0(ij)Tlsum(j,i−l)这部分可以 O(k3+n) 计算。
T2. 积木小赛
SAM 的话记录每个长度区间哪些长度出现过。然而实际上 hash 就行了。SAM 是 O(n2) 的,hash 需要 map/排序,我写双模就 TLE 80 了 /dk
T3. 岛屿探险
算是最正常的一道题了吧。。
询问差分,离线,从前往后做。
还是拆位的思想。
使 ac≤b 的 c 必定是从高到低一段 0 然后一个 1 剩下任取。
把 (a,b) 复制 log 份塞进对应的所有 c 的合法区间,现在要用 (c,d) 去切这 log 个区间,那么把 (c,d) 也复制 log 份塞进所有包含 c 的区间即可。
log 个位置分别做,开 01trie 查询 ac≤d 的 a 的个数。
code
1 |
|