Codeforces Round 951 C

138 阅读1分钟

题目

Problem - C - Codeforces

题意

给定一个序列 K=k1,k2.....,ki,.....knK = { k_1 , k_2 ..... , k_i , ..... k_n} , 要求构造出X=x1,x2,....,xnX = {x_1 , x_2 , .... , x_n} , 使得xi,ki{\forall}{x_i} , {k_i} 都有 xiki>i=1nxix_i * k_i > \sum_{i = 1}^{n}x_i , 其中1in1 \leq i \leq n , 如果无解则输出1-1

解法

  • 考虑K=n|K| = n 时, 其中 n2n \geq 2, 我们有 k1,k2,......,knk_1 , k_2 , ...... , k_n , 那我们需要使得以下满足。
k1x1>x1+x2+x3.....+xnk2x2>x1+x2+x3.....+xnk3x3>x1+x2+x3.....+xnk4x4>x1+x2+x3.....+xn...........................................knxn>x1+x2+x3.....+xn\begin{align} k_1 * x_1 > x_1 + x_2 + x_3 ..... + x_n \\ k_2 * x_2 > x_1 + x_2 + x_3 ..... + x_n \\ k_3 * x_3 > x_1 + x_2 + x_3 ..... + x_n \\ k_4 * x_4 > x_1 + x_2 + x_3 ..... + x_n \\ ...........................................\\ k_n * x_n > x_1 + x_2 + x_3 ..... + x_n \end{align}

为了使上面这个不等式满足 , 那么一定需要 min (k1x1, k2x2,.....,knxn)>x1+x2+x3...xnmin \ (k_1 * x_1 ,\ k_2 * x_2 , ..... , k_n * x_n) > x_1 + x_2 + x_3 ... x_n

我们不妨设ksxsk_s * x_s 最小 , 其中 1sn1 \leq s \leq n,那么我们一定有下式成立。

ksxs>i=1nxi k_s * x_s > \sum_{i=1}^{n} x_i

移项可得

xs>i=1nxiks x_s > \frac{\sum_{i=1}^{n} x_i}{k_s}

又由前提ksxsk_s * x_s 最小 , 那么可以得到 ksxsi1inxikik_s * x_s \leq {\forall}i_{1 \leq i \leq n} x_i * k_i

将上两式合并,我们可以得到

i=1nxi<ksxsi1inxiki \sum_{i=1}^{n} x_i < k_s * x_s \leq {\forall}i_{1 \leq i \leq n} x_i * k_i
  • 结论: 如果存在合法解 , 那么上式成立。观察到 ksxs=xikik_s * x_s = x_i * k_i , 那么就一定存在一组XX使得 , 所有的kixik_i * x_i相等

  • 使得kixik_i * x_i 都相等 , 那等于什么?一个简单的做法 , 就是取L=lcmi=1nkiL = lcm_{i=1}^nk_i , 那么我们可以使得所有的 kixi=Lk_i * x_i = L , 那么我们可以很容易求出 xi=Lkix_i = \frac{L}{k_i} 。 但是求出LL 的时候 ,检查一下是否大于 i=1nxi\sum_{i=1}^{n}x_i。 如果成立 , 那么合法, 输出Lki\frac{L}{k_i} 即可 。 如果不成立输出 1-1

问题得解!

致谢

湖大Ll大佬的指点 , 受到启发不尽感激。