Loading

apio 练习赛 t3

题意

\(N\) 个化学药品,其中有 \([1,K]\) 个药品内有杂质。

你可以进行 \(M\) 次操作,第 \(i\) 次你可以放进去一些化学药品,然后机器会返回这里面是否有药品中有杂质。

你的操作序列必须是固定的。并且你在固定策略后,有 \(T\) 组测试,每组测试会告诉每次操作的结果,你都要返回哪些药品中有杂质。

sub1 : \(N=10^5,K=1,M=20\)
sub2 : \(N=10^3,K=2,M=48\)
sub3 : \(N=2.8 \times 10^4,K=4,M=170\)

题解

考虑每个化学药品在哪些操作中使用了,就可以把问题看作是给每个药品标一个小于 \(2^M\) 的标号,返回的则是有杂质药品的标号或的值。

这样,\(K=1\) 就可以直接做了。

\(K=2\)\(K=4\) 可以考虑随机化。

\(K=2\) 每一位以 \(\frac{1}{4}\) 左右的概率取 \(1\) 比较合适。\(K=4\)\(\frac{1}{7}\) 左右比较合适

\(K=2\) 由于你可以 \(n^2\) 暴力 check,所以可以 \(i\) 从前往后依次确定标号 \(a_i\),每次随机后判断是否可行,如果 \(a_i | a_j\) 和之前的重复了就再随一个 \(a_i\)。这样可以做到更优一点,大概 \(30 \sim 35\) 次询问。

\(K=4\) 的时候,如果答案的某一位是 \(0\),就可以判断一些位置必然没有杂质。

这样我可以把有杂质的药品确定在一个集合内了。

然后再在集合内暴力找到最小可能的答案(也就是说,这些药品的或的值恰好为给定的值)就行了,可以做到 \(110\sim 120\) 次询问。这些东西都是可以使用 bitset 的。

posted @ 2023-05-17 09:20  zhoukangyang  阅读(1033)  评论(3编辑  收藏  举报