题意
给定多重集 S,将其划分为 m 个多重集 Si 使得 mexSi 对所有 i 相等。求此时 mexSi 的最小值。
显然合法的分割的 mex 一定是 mexS。
题意
有未知序列 {ai},设 f(l,r) 为 {al,…,ar} 的不同元素个数,
给出 br=l=1∑rf(l,r),求 {ai}。
注意到
f(l,r)−f(l,r−1)=[al∈/{al,…,ar−1}]∈{0,1}
以及
f(l−1,r)−f(l−1,r−1)≤f(l,r)−f(l,r−1)
设 g(l,r)=f(l,r)−f(l,r−1),
1 和 0 的分界点 L 上(即上式不取等时),
ar=aL−1,ar∈/{aL,…,ar−1}(L≥1)
只需求出 L,即可求出 ar。
我们知道,01-串中 1 的个数为数列的和,即
r−L+1=l=1∑rg(l,r)
由于
br−br−1=f(r,r)+l=1∑r−1f(l,r)−f(l,r−1)=1+l=1∑r−1g(l,r)
整理可得
ar=ar−br+br−1(r−br+br−1=0)
r−(br−br−1)=0 代表 ar∈/{a1,…,ar−1},可以任选一个其他元素。
题意
设 rev(x) 表示二进制反序,问是否存在 x 使得 x⊕rev(x)=n?
先不考虑前导零。显然 n 必为回文数,且若有奇数位,则最中间的一位为 0。
前导零可以通过 1⊕1 得到,因此只需保证回文。把后面的所有 0 删去,则由回文性质可以去掉前导零。
题意
有长度为 2n 的未知序列 {ai},∀x=1,…,n,∃i=j,ai=aj=x。
每次询问一个下标集合 S,返回 {i,j}∈S,ai=ajmaxai,若不存在 {i,j}∈S,ai=aj 则返回 0。
用不超过 3n 次询问求出 {ai}。
设 Q(S) 为询问 S 的答案,注意到若 S 满足 Q(S)=0,且 Q(S∪{i})=0,则 ai=Q(S∪{a})。
于是有如下策略:
- 初始 S,T←∅。
- 对于 i=1,…,2n:
- 若 Q(S∪{i})=q=0,则 ai←q,并把 ai 加入 T;
- 否则,把 ai 加入 S。
- 对于 i∈S:
- ai←Q(T∪{i})。
易证总询问次数为 3n。