Description

Tweetuzki 所在的班级有 \(n\) 名学生,座号从 \(1\) 到 \(n\)。有一次,教官命令班上的 \(n\) 名学生按照座号顺序从左到右排成一排站好军姿,其中 \(1\) 号学生在最左边,\(n\) 号学生在最右边。

由于同学们站了很久,怨声载道,仁慈的教官又不希望大家一起解散导致混乱的局面,于是想了一个办法:教官从最左边——也就是 \(1\) 号学生身旁出发,走到 \(n\) 号学生右边后,再折返回到 \(1\) 号同学旁边。在教官在从 \(1\) 号同学走到 \(n\) 号同学这段路上,当走到某位同学身边时,他可以选择让这位同学出列,也可以等到折返的时候再使这名同学出列。

但是有一些同学在军训过程中表现极坏,因此教官希望他们晚一些出列休息。对于 \(i\) 号同学,定义他的“坏值”为 \(w_i\)。教官希望在一次往返过程中,使得所有学生出列,且最大化 \(\sum_{i=1}^{n}~r_i~\times~w_i\) 的值,其中 \(r_i\) 表示 \(i\) 号同学是第 \(r_i\) 位出列的学生。机智的教官一下子就想出了这个方案,Tweetuzki 大为惊讶,于是他去请教教官如何做到。可是他的胆子很小而且“坏值”很大,教官可能不会告诉他,所以他就找到了你。

Input

第一行一个整数 \(n\) 代表序列长度

第二行是 \(n\) 个整数代表这个序列

Output

第一行一个整数,代表最大坏值

下面一行是 \(n\) 个数,按照出列选手字典序最小输出坏值

Hint

\(0~\leq~n,w_i~\leq~10^6\)

Solution

考虑答案的出列编号序列一定是单峰的,即如果把序列下标作为 \(x\) 坐标, 出列选手的序号作为 \(y\) 坐标,则函数图像一定如下

并且 \(n\) 一定是峰。于是考虑倒着往前决定出队的顺序,考虑已经决定了 \(i+1~\sim~n\)的出队顺序,那么 \(i\) 只可能放在这条函数图线的最左侧或者最右侧,我们比较他们的贡献。

考虑 \(i\) 放在最左侧的情况,这相当于他后面出队所有人的 \(r\) 值都加一,于是放在左侧的贡献 \(s_l~=~\sum_{j~=i+1}^{n}~w_j~+~w_i\)

同理,考虑放在右侧的贡献,即为他前面已经放的人的个数,即 \(s_r~=~(n-i)~\times~w_i~+~w_i\)

比较 \(sl\) 和 \(s_r\) 的大小即可。由于序号字典序尽可能小,当两者相等时优先放在左侧即可。

Code

#include <cstdio>
#include <vector>
#include <algorithm>
#ifdef ONLINE_JUDGE
#define putchar(o)\
puts("I am a cheater!")
#define freopen(a, b, c)
#endif
#define rg register
#define ci const int
#define cl const long longtypedef long long int ll;namespace IPT {const int L = 1000000;char buf[L], *front=buf, *end=buf;char GetChar() {if (front == end) {end = buf + fread(front = buf, 1, L, stdin);if (front == end) return -1;}return *(front++);}
}template <typename T>
inline void qr(T &x) {rg char ch = IPT::GetChar(), lst = ' ';while ((ch > '9') || (ch < '0')) lst = ch, ch=IPT::GetChar();while ((ch >= '0') && (ch <= '9')) x = (x << 1) + (x << 3) + (ch ^ 48), ch = IPT::GetChar();if (lst == '-') x = -x;
}template <typename T>
inline void ReadDb(T &x) {rg char ch = IPT::GetChar(), lst = ' ';while ((ch > '9') || (ch < '0')) lst = ch, ch = IPT::GetChar();while ((ch >= '0') && (ch <= '9')) x = x * 10 + (ch ^ 48), ch = IPT::GetChar();if (ch == '.') {ch = IPT::GetChar();double base = 1;while ((ch >= '0') && (ch <= '9')) x += (ch ^ 48) * ((base *= 0.1)), ch = IPT::GetChar();}if (lst == '-') x = -x;
}namespace OPT {char buf[120];
}template <typename T>
inline void qw(T x, const char aft, const bool pt) {if (x < 0) {x = -x, putchar('-');}rg int top=0;do {OPT::buf[++top] = x % 10 + '0';} while (x /= 10);while (top) putchar(OPT::buf[top--]);if (pt) putchar(aft);
}const int maxn = 1000010;int n;
ll ans, sum;
int MU[maxn], temp[maxn];
std::vector<int>pre,pos;int main() {freopen("1.in", "r", stdin);qr(n);for (rg int i = 1; i <= n; ++i) qr(MU[i]);for (rg int i = n; i; --i) {ll sl = sum + MU[i], sr = 1ll * MU[i] * (n - i) + MU[i];if (sl >= sr) {pre.push_back(i); ans += sl;}else {pos.push_back(i); ans += sr;}sum += MU[i];}qw(ans, '\n', true);int sz = pre.size();for (rg int i = sz - 1; ~i; --i) qw(MU[pre[i]], ' ', true);sz = pos.size();for (rg int i = 0; i < sz; ++i) qw(MU[pos[i]], ' ', true);putchar('\n');
}

转载于:https://www.cnblogs.com/yifusuyi/p/10091454.html

【贪心】【P5078】Tweetuzki 爱军训相关推荐

  1. 牛客白月赛26【题解】

    https://ac.nowcoder.com/acm/contest/6013 目录 牛牛爱学习[二分] 牛牛爱数学[一元二次方程求根] 牛牛种花[树状数组] 失忆药水[思维] 牛牛走迷宫[bfs] ...

  2. 计蒜客 爱奇艺的自制节目(枚举 贪心)

    爱奇艺的自制节目 爱奇艺作为一家视频网站巨头,要为上亿的用户每天都提供"悦享品质"的服务.除了引进一些优秀的影视作品外,爱奇艺还做了一些诸如奇葩说.晓松奇谈的自制节目.爱奇艺最近又 ...

  3. 【贪心思想】兄弟总爱贪小便宜,原来是把贪心算法掌握得如此熟练【经典例题讲解】

    ⭐️引言⭐️ 大家好,我是执梗.最近通过我这篇蓝桥全解析文章--蓝桥全解析[内附资源]来找我咨询的兄弟很多.他们都有一个问题--贪心是不是最难的算法呀?答案确实是肯定的,那有的兄弟们就觉得那我是不是要 ...

  4. 我爱蜜袋鼯 (二分查找再进行贪心判断)

     题目描述 你知道蜜袋鼯吗? 蜜袋鼯是一种有袋动物(有袋的温血动物像袋鼠和沙袋鼠),蜜袋鼯产于澳洲纽几内亚和南澳洲,大多数时间在树上活动,舔食树蜜.蜜袋鼯的身体两侧拥有滑行膜, 从手关节延伸到脚踝 ...

  5. 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅

    这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...

  6. 动物统计加强版(贪心,字典序)

    动物统计加强版 时间限制:3000 ms  |  内存限制:150000 KB 难度:4 描述 在美丽大兴安岭原始森林中存在数量繁多的物种,在勘察员带来的各种动物资料中有未统计数量的原始动物的名单.科 ...

  7. 最短路径算法(一) Dijkstra算法(贪心算法)

    Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题. 其基本原理是 ...

  8. CodeForces - 1369E DeadLee(贪心+拓扑)

    题目链接:点击查看 题目大意:Lee的厨房中有 n 道菜,每道菜的数量为 w[ i ] ,现在 Lee 会邀请 m 个朋友,每个朋友都有最爱吃的两道菜 x[ i ] 和 y[ i ] ,当朋友 i 来 ...

  9. unity2018关联不到vs_现实VS真爱:远嫁的幸福和悲哀

    陆拾一 LUSHIYI <现实VS真爱:远嫁的幸福和悲哀> Part.1 你有过远嫁的犹豫或者经历吗?关于这个话题,我从未写过.今天借着一封读者的来信,与大家聊一聊. 拾一,你好.我跟男朋 ...

最新文章

  1. 标准出现问题,人工智能正在走向错误的方向
  2. 2018年自媒体人的出路在哪?
  3. WCF技术剖析之十一:异步操作在WCF中的应用(上篇)
  4. 20个简单汇编语言程序_20个简单的Photoshop技巧将使您的照片看起来很棒
  5. 【LeetCode笔记】剑指 Offer 57-. 和为s的两个数字 (Java、对撞双指针)
  6. iOS开发之控制器创建与加载(生命周期)
  7. H3C交换机配件RS232配置线(DB9针转RJ45)
  8. Delphi7 动态数组
  9. matlab计算均值和方差
  10. Nutch第一次搭建部署总结
  11. mysql万能密码_万能密码:‘or 1=1-- 实战SQL注入,秒破后台
  12. 贪吃蛇小游戏(基于Python)
  13. KinectSDK + Unity3D学习总结
  14. colorbox 自适应 高度
  15. 欠阻尼二阶系统的单位阶跃响应分析
  16. ESP32-S3无线WiFi芯片模组,赋能家居设备智能化生活应用
  17. 常见的head内标签
  18. c++实现种子填充算法与扫描线算法
  19. 指令在Vue.js 2.0中的变化
  20. 几分钟上线一个网站,这些神器我爱了

热门文章

  1. 年纪最小90后,他们在北大教AI
  2. 贝索斯:亚马逊正探讨人脸识别如何监管
  3. 2010年—2018年中国电商成交额排名
  4. 解读 | Arm 机器学习处理器的独特之处
  5. dgl库之高级用法dgl.DGLGraph.update_all
  6. (详细全面)softmax和log_softmax的联系和区别,NLLLOSS和CrossEntropyLoss的联系和区别
  7. 威胁生存!科学家警告灾难性“气候临界点”已逼近
  8. 《2020城市大脑全球标准研究报告》全文正式开放申领
  9. 彭博社 : 中国稀土——美欧的苦恼
  10. Waymo十周年:多尔戈夫讲述从被嘲笑到硕果累累