题目梗概
题好多呜,所以不设梗概了。(
赛时记录
A,感觉水呢;B,完全不会;C,感觉贪心;D,疑似差值;E,一头雾水;F,怎么还分两个版本,都不会呜;G,咋是交互;H,不可能会。
A!写了两版代码结果呢交的时候交错了导致……搞得跟我 A 也没过似的。
嗯对,总之就是算 \(\max\) 和 \(\min\) 出来比对一下 \(x\) 在不在范围内就行了。
B!分析了半天发现,噢哟,有意思,如果不满足条件的话 \(n\) 最大三十几???暴力,上!
C!写完了写完了,好难好难。
D,玩了一会弄出来了。
时间不错了,开 E。思考思考思考,无效。
时间到了,交题去吧。
分数分布
A B D 都过了,C 怎么似了?查了半天,我是【】,居然把 \(life\) 和 \(dam\) 写反了,我是【】我是【】。
呜呜呜怎么这么粗心啊,CF 样例怎么这么水啊,呜呜呜。
赛后题解
A
不难发现我们只需要保证序列中的最大值 \(mx\) 和最小值 \(mn\) 构成的区间 \([mn,mx]\) 中存在 \(x\) 就行了;等价于判断是否满足 \(mn \le x \le mx\)。时间复杂度 \(O(n)\)。
B
首先你会想到 \(O(n^2)\) 暴力,枚举即可,但是明显过不去。怎么办呢?
推导一下,如果要输出 -1 也就是无解情况会发生什么?
首先肯定最多也只有一个偶数,否则就会——如果有两个偶数那么直接拿出来做 \(\bmod\) 操作肯定是偶数啊,所以要无解你肯定最多也只能有一个偶数。
接着考虑奇数,就假设是 \(a_i\) 和 \(a_j\) 好了。因为 \(a_j = \lfloor \frac{a_j}{a_i} \rfloor \times a_i + a_j \bmod a_i\),又因为设定,\(a_j \bmod a_i\) 和 \(a_i\) 都是奇数所以 \(\lfloor \frac{a_j}{a_i} \rfloor\) 必然为偶数,也就是有 \(a_j > 2 \times a_i\)。
由于题目保证严格递增,奇数那一条规范直接锁死范围——毕竟 \(a_i\) 最大就 \(10^9\),后者要至少是前者的两倍以上的话,\(n\) 就最大也才 \(31\) 了!那直接上暴力嘛,如果有解肯定能 \(O(n)\) 求出,而无解的话 \(n\) 最大 \(31\),\(O(n^2)\) 跑多少次都不会挂!