为了能到远方,脚下|

Shoukaku

园龄:7个月粉丝:2关注:3

洛谷 [P10393 无限循环?] 题解

本题是一个推论题。

由题目给定的条件:

  • wi=12(ai+ai+1)

  • wn=12(a1+an)

转化得到:

  • 2wi=ai+ai+1

  • 2wn=a1+an

移项得:

  • ai=2wiai+1

  • an=2wia1

然后,我们发现 ai+1 可以按照上述推论转化为 ai+1=2wi+1ai+2

即得到 ai=2wi(2wi+1ai+2)

我们重复此过程,并让起始的 i=1,最终得到了这个式子:

  • a1=2w1(2w2(2w3(...(2wna1))))

由于 n 是奇数,那么我们就可以将这个式子整理为:

  • a1=2w12w2+2w32w4+2w5...+2wna1

把末尾 a1 移项,并化简得:

  • a1=w1w2+w3w4+w5w6...+wn

这时候我们就可以很轻松地利用给定的 wi 去构造 a1 的最大值/最小值了。

AC 代码

#include<bits/stdc++.h>
using namespace std;
int n, w[1000010];
signed main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> w[i];
    }
    sort(w + 1, w + 1 + n);
    int i = n, j = 1;
    for (int now = 1; now <= n; now++) {
        if (now & 1) { // 奇数, +
            cout << w[i--] << " ";
        } else {
            cout << w[j++] << " ";
        }
    }
    cout << endl;
    i = 1, j = n;
    for (int now = 1; now <= n; now++) {
        if (now & 1) { // 奇数, +
            cout << w[i++] << " ";
        } else {
            cout << w[j--] << " ";
        }
    }
    return 0;
}

本文作者:Shoukaku

本文链接:https://www.cnblogs.com/Xiang-he/p/18350981

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Shoukaku  阅读(18)  评论(0编辑  收藏  举报
//雪花飘落效果
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起