洛谷 [P10393 无限循环?] 题解
本题是一个推论题。
由题目给定的条件:
转化得到:
移项得:
然后,我们发现 可以按照上述推论转化为 。
即得到 。
我们重复此过程,并让起始的 ,最终得到了这个式子:
- 。
由于 是奇数,那么我们就可以将这个式子整理为:
把末尾 移项,并化简得:
这时候我们就可以很轻松地利用给定的 去构造 的最大值/最小值了。
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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步