CF140C


贪心+优先队列


贪心策略:每次取出数量最多的三种球,合成一个答案,再把雪球数都-1再插回去,只要还剩下三种雪球就可以不断地合成

雪球数用优先队列维护


#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,a[N],b[N],nm;
struct ball{int i,n; //i是离散数组中的编号,n为该种雪球的剩余数量inline bool operator < (const ball &nt) const{if(n==nt.n) return i<nt.i;return n<nt.n;}
};
struct ANS{int x,y,z;inline void change(){int tx=x,ty=y,tz=z;x=max(max(tx,ty),tz); //求最大z=min(min(tx,ty),tz); //求最小y=tx+ty+tz-x-z; //和减去最大最小就是中间值}
}ans[N/3];
priority_queue<ball> q;
signed main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]),b[i]=a[i];sort(b+1,b+1+n);sort(a+1,a+1+n);int un=unique(b+1,b+1+n)-b-1; //离散化for(int i=1;i<=n;){int j=i;while(j+1<=n&&a[j+1]==a[i]) j++; //找到该种雪球最右到哪int hn=j-i+1,id=lower_bound(b+1,b+1+un,a[i])-b; //该种雪球数量q.push((ball){id,hn});i=j+1; //跳过这一串相同的雪球}while(q.size()>=3){ //如果还有三种以上雪球ball alpha=q.top();q.pop(); //最多的ball beta=q.top();q.pop(); //次多的ball gamma=q.top();q.pop(); //第三多的alpha.n--;if(alpha.n) q.push(alpha); //都减去一个雪球beta.n--;if(beta.n) q.push(beta);gamma.n--;if(gamma.n) q.push(gamma);ans[++nm]=((ANS){b[alpha.i],b[beta.i],b[gamma.i]}); //合成答案}printf("%d\n",nm);for(int i=1;i<=nm;i++){ANS now=ans[i];now.change(); //整理一下答案的排序printf("%d %d %d\n",now.x,now.y,now.z);}
}

转载于:https://www.cnblogs.com/think-twice/p/11247547.html

CF140C New Year Snowmen(贪心+优先队列)相关推荐

  1. 贪心(优先队列) - New Year Snowmen - CodeForces - 140C

    贪心(优先队列) - New Year Snowmen - CodeForces - 140C 题意: 给定一个长度为n的正整数序列a1,a2,...,an.给定一个长度为n的正整数序列a_1,a_2 ...

  2. CodeForces 140C New Year Snowmen (贪心+优先队列)

    题意:n个数,选三个严格下降的数为一组,求最多能选多少组,并列出每组哪些数. 题解:贪心+优先队列 最多能选多少组,那么必须贪心数量多的. 例如:1 1 2 3 4 5 如果按照数的大小排序,只能贪到 ...

  3. HDU 6438 网络赛 Buy and Resell(贪心 + 优先队列)题解

    思路:维护一个递增队列,如果当天的w比队首大,那么我们给收益增加 w - q.top(),这里的意思可以理解为w对总收益的贡献而不是真正获利的具体数额,这样我们就能求出最大收益.注意一下,如果w对收益 ...

  4. 1163 最高的奖励(贪心+优先队列)

    有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成该任务,就可以获得对应的奖励.完成每一个任务所需的时间都是1个单位时间.有时候完成所有任务是不可能的,因为时间上可能会有冲突 ...

  5. 贪心+优先队列 HDOJ 5360 Hiking

    题目传送门 1 /* 2 题意:求邀请顺序使得去爬山的人最多,每个人有去的条件 3 贪心+优先队列:首先按照l和r从小到大排序,每一次将当前人数相同的被邀请者入队,那么只要能当前人数比最多人数条件小, ...

  6. 【BHOJ 女娲加农炮 |、||】贪心 | 优先队列 | 堆 | E

    这次我们通过两道例题来总结一下优先队列的用法和实现: 目录: [BHOJ 1512]女娲加农炮 [BHOJ 1517]女娲加农炮II [BHOJ 1512]女娲加农炮 核心:贪心 + 优先队列 URL ...

  7. codeforces D. Fedor and coupons 贪心+优先队列

    题目地址:点击打开链接 D. Fedor and coupons time limit per test 4 seconds memory limit per test 256 megabytes i ...

  8. D - New Year Snowmen(优先队列+贪心)

    思路 题意:给你n个雪球,每个雪球都有一个半径,做一个雪人需要不同半径的三个雪球,问最多可以做多少个雪人 做法:贪心:每次都选剩余数量最多的三种半径的雪球,原因是如果我们选数量少的雪球,那么有可能最后 ...

  9. CF140C.New Year Snowmen(优先队列+map)

    题目链接:https://vjudge.net/contest/376896#problem/D 题意:给出n个数,询问能排出多少个长度为三的纯单调序列,顺序可以打乱,一个数只可以用一次 阶梯思路: ...

最新文章

  1. logstash 自动重新加载配置
  2. 统计学习基础:数据挖掘、推理和预测_数据挖掘——智能财务进阶之梯(含视频、PPT)...
  3. 隐函数画图with R
  4. sublime c 语言 编译环境搭建,详解sublime搭建C/C++编译环境
  5. struts2 s:if标签以及 #,%{},%{#}的使用方法
  6. [导入]体验Asp.Net Mvc Preview5(3)-探索ModelBinder的工作原理
  7. js 随机1-10随机数_寻找随机的错误-一个真实的故事
  8. 关于压缩工具 7z(7-zip) 的选项 -si(从标准输入流读取数据)的解读
  9. 基于图神经网络的节点表征学习
  10. go项目中使用makefile文件
  11. mysql active推送消息_java实现基于activeMQ的消息推送
  12. var radioname = new array();_兰帕德:引进VAR是为了回放关键时刻的情况,他们的行为令我困惑...
  13. Incorrect string value: '\xE8\x8B\x8F\xE6\x99\xA8...' for column 'user_name' at row 1
  14. 异常检测: 多元高斯分布
  15. Java实现文件批量重命名
  16. 不解决这六个问题,农商行怎么去玩大数据?
  17. 【气动学】基于龙格库塔算法实现外弹道仿真含Matlab源码
  18. 安泰:精密电流源电路原理及应用
  19. 【DKN】(一)KCN详解
  20. 2022年危险化学品经营单位主要负责人及危险化学品经营单位主要负责人操作证考试

热门文章

  1. wifi计费认证系统php,TP-LINK认证计费系统 - TP-LINK官方网站
  2. 解读小红书2022年母婴行业报告:心智种草的流量密码
  3. 华为Android10怎样root,华为手机怎么root?详细的root教程在此
  4. 华为鸿蒙HarmonyOS 简介
  5. ubuntu背景色改为淡绿色
  6. 用C语言恶搞你的好朋友strcmp()
  7. 手淘推出“店铺二楼”
  8. 微信公众号编辑器的附件功能(如Word、Excel、Pdf等)
  9. 骑行318、 2016.7.19
  10. java项目编码问题解决