题目
Problem - C - Codeforces
题意
给定一个序列 K=k1,k2.....,ki,.....kn , 要求构造出X=x1,x2,....,xn , 使得∀xi,ki 都有 xi∗ki>∑i=1nxi , 其中1≤i≤n , 如果无解则输出−1。
解法
- 考虑∣K∣=n 时, 其中 n≥2, 我们有 k1,k2,......,kn , 那我们需要使得以下满足。
k1∗x1>x1+x2+x3.....+xnk2∗x2>x1+x2+x3.....+xnk3∗x3>x1+x2+x3.....+xnk4∗x4>x1+x2+x3.....+xn...........................................kn∗xn>x1+x2+x3.....+xn
为了使上面这个不等式满足 , 那么一定需要 min (k1∗x1, k2∗x2,.....,kn∗xn)>x1+x2+x3...xn。
我们不妨设ks∗xs 最小 , 其中 1≤s≤n,那么我们一定有下式成立。
ks∗xs>i=1∑nxi
移项可得
xs>ks∑i=1nxi
又由前提ks∗xs 最小 , 那么可以得到 ks∗xs≤∀i1≤i≤nxi∗ki。
将上两式合并,我们可以得到
i=1∑nxi<ks∗xs≤∀i1≤i≤nxi∗ki
-
结论: 如果存在合法解 , 那么上式成立。观察到 ks∗xs=xi∗ki , 那么就一定存在一组X使得 , 所有的ki∗xi 都相等。
-
使得ki∗xi 都相等 , 那等于什么?一个简单的做法 , 就是取L=lcmi=1nki , 那么我们可以使得所有的 ki∗xi=L , 那么我们可以很容易求出 xi=kiL 。
但是求出L 的时候 ,检查一下是否大于 ∑i=1nxi。 如果成立 , 那么合法,
输出kiL 即可 。 如果不成立输出 −1。
问题得解!
致谢
湖大Ll大佬的指点 , 受到启发不尽感激。