闲扯
辣鸡 $std$ ,辣鸡出题人建议做掉
$T2,T3$ 的复杂度都不对, $n\log n$ 的题数据范围开了 $2\cdot10^6$ ,虽然我电脑不太好,也不至于给它开了 $O_2$ 也跑不过吧??
题面
$ftp$
$T1$
Solution
首先明确一点,我们每一位都是必须确定的,而且找不到任何方法一次性确定两位及以上。
而确定一位是 $0$ 还是 $1$ 很简单,只需要用 $((2^n-1)\ xor\ 2^k)\&x$ 即可。
因为有 $n$ 位,所以需要 $n$ 个数。
又因为顺序可以乱,所以方案数为排列数,即 $ans=n!$ 。
由于 $n$ 的范围比较大,有 $10^9$ ,所以考虑分段打表。
每 $10^6$ 个数输出一个,每次找到最大的不大于 $n$ 的一个,直接暴力乘即可。
时间复杂度: $O(n-10^6\cdot\lfloor\frac{n}{10^6}\rfloor)$ 。
Code
1 |
|
$T2$
Solution
我们先按照 $a$ 从大到小排个序。
我们用 $|A|,|B|$ 来表示 $A,B$ 中的最大值。
考虑以 $a_i$ 作为 $|A|$ 时,显然所有的 $k\in[i+1,n]$ 都必须在 $B$ 中。
因为所求为最大值,所以 $|B|$ 至少为 $\max_{j=i+1}^n b_j$ 。
而对于 $k\in[1,i-1]$ ,它们可以任意的放入 $A,B$ 中。
因为我们要最小化 $||A|-|B||$ ,所以我们需要找到距离 $a_i$ 最近的 $b_k,k\in[1,i-1]$ 。
如果 $b_k\geq|B|$ ,那么我们可以用来更新答。
对于每一个 $i$ ,它对应的 $|B|$ 是确定的,所以我们只需要看怎么解决 $b_k$ 。
我们可以发现随着 $a_i$ 的增长, $b_k$ 也是单调不减的,所以我们直接从小往大扫即可。
Code
1 |
|
$T3$
看不懂
总结
属于出题人的问题。