10.4
10.4
100+100+0+0=200
T1 最大权值
不难想到,如果选择两个数,那么最高位那个 0 显然是难以保住的。
所以:
- 若 \(n\) 为奇数,输出 \(n\)。
- 若 \(n\) 为偶数,输出 \(n+1\)。
\(n=1\) 特判。
T2 配对
考虑转化成树上问题,建出 dfs 树,那么有树边和非树边,考虑怎么消掉非树边,对于一个点,考虑将连接这个点的非树边互相抵消到只剩一条,那么对于每一条非树边由于连接祖先和孙子,考虑在孙子处标记为 \(1\),表示在孙子消除掉这条边。
删去剩余非树边需要借助树边,也就是要把整棵树断开成一个个连通块,且每个联通块边数都是偶数,一定有解,于是剩下的随便搞一下即可。
T3 随机打乱
神秘题,以为是逐渐向序列中插入数,结果告诉我是一道区间 dp。
令 \(f_{l,r}\) 表示目前在 \([l,r]\) 区间内的期望。
假设 \([l,r]\) 区间内完全包含 \(m\) 个区间,那么有转移:
\[f_{l,r} = 1+ \frac{1}{m} \sum_i (f_{l,a_i-1} + f_{a_i+1,r})
\]
这就是 \(\mathcal{O(n^3)}\) 做法。
不难发现瓶颈在于计算时的求和。
考虑用前缀和和后缀和优化掉,时间复杂度为 \(\mathcal{O(n^2)}\)。
T4 猜数
交互题。在 \(4\) 次询问内猜出一个数,每次告诉你商或者余数(由他决定),\(n\) 可达 \(10^{18}\)。
潜在的数都可以表示成如下:\(A+Bx\)(\(0 \leq x \leq C\))。
首先观察到两个性质:
- 若剩余两个数,那么直接询问大的那个就可以了,需要 \(1\) 次查询。
- 若 \(C<B\),那么直接询问 \(B-1\) 即可,也只需要 \(1\) 次。
那么接下来可以开始构造了。
询问 756
│
├─ 返回 /
│ │
│ └─ 询问 4
│ │
│ ├─ 返回 /
│ │ └─ 询问 2
│ │ └─ 剩余 <= 2 个候选
│ │
│ └─ 返回 %
│ └─ 询问 7
│ ├─ 返回 / -> 剩余 <= 2 个候选
│ └─ 返回 % -> D = 28, C <= 27
│
└─ 返回 %
│
└─ 询问 1500001
│
├─ 返回 %
│ └─ C < D
│
└─ 返回 /
└─ 询问 1511
├─ 返回 / -> 剩余 <= 2 个候选
└─ 返回 % -> 剩余 <= 2 个候选
不唯一。

浙公网安备 33010602011771号