洛谷$P2168\ [NOI2015]$荷马史诗 贪心
2024-10-08 05:35:04
正解:贪心
解题报告:
昂这个就哈夫曼树板子题鸭$QwQ$,只是从二叉变成多叉了$QwQ$
考虑用类似合并果子的方法?就从两个变成$k$个了嘛,一样的鸭,然后就做完了$QwQ$
注意一个细节趴$QwQ$,就可能存在选不满的情况,就先补0就成$QwQ$
$over$!
(然后记得开$ll$昂,,,$100pts->45pts$还是挺难受的了$kk$
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define sc second
#define il inline
#define gc getchar()
#define mp make_pair
#define ll long long
#define int long long
#define P pair<ll,int>
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)
#define lb(x) lower_bound(st+1,st+st_cnt+1,x)-st int n,K;
ll as;
priority_queue< P,vector<P>,greater<P> >Q; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
} signed main()
{
//freopen("2168.in","r",stdin);freopen("2168.out","w",stdout);
n=read();K=read();rp(i,,n)Q.push(mp(read(),));while((n-)%(K-))Q.push(mp(,)),++n;
while((int)Q.size()>=K)
{
P nw=mp(,);
rp(i,,K)
{
P tmp=Q.top();Q.pop();nw.fi+=tmp.fi;nw.sc=max(nw.sc,tmp.sc+);
}
Q.push(nw);as+=nw.fi;
}
printf("%lld\n%lld\n",as,Q.top().sc);
return ;
}
最新文章
- μCos-ii学习笔记1_概述
- 学习indy组件之一idhttp的使用方法
- iOS开发流程总结
- 献给广大it从业人士:早睡早起,晚睡也早起
- CSS 中的内联元素、块级元素以及display的各个属性的特点
- html 绘图渐变和图片填充
- CSS :before和:after (转)
- Xcode5 上使用Base SDK iOS6程序和iOS6模拟器
- Codevs 1048 石子归并
- FFMPEG视音频编解码零基础学习方法-b
- 【MySQL性能优化】改进MySQL Order By Rand()的低效率
- underscorejs-contains学习
- 180行ruby代码搞定游戏2048
- 2014/08/23——OJ出现waiting...
- 去掉matlab图片空白边缘
- 关于C++中虚函数表存放位置的思考
- HDU1027 Ignatius and the Princess II
- Angular CLI: 发布到 GitHub Pages
- Radar Installation POJ - 1328
- Windows 2012服务器安装GPU版TensorFlow完全攻略