2 条题解
-
0938936 LV 8 @ 2018-09-17 09:49:35
注意答案和样例是不符的,这题有毒,最后的距离不要+1
//哈夫曼树+堆O(nlogn)算法(类似合并果子) #include<iostream> #include<algorithm> using namespace std; typedef long long ll; ll n,a[2000001],s; long long ans; struct heap {//小根堆 ll val[2000001],size; void set(ll v){ size++; val[size]=v; ll p=size; while(p>1 && val[p>>1]>v){ val[p]=val[p>>1]; p>>=1; } val[p]=v; } ll get(){ ll v=val[1]; val[1]=val[size]; size--; pd(1); return v; } void pd(ll v){ ll lar=v,l=v*2,r=v*2+1; if(l<=size) lar=val[l]<val[lar]?l:lar; if(r<=size) lar=val[r]<val[lar]?r:lar; if(lar!=v){ swap(val[v],val[lar]); pd(lar); } } }h; int main(){ ios::sync_with_stdio(false); h.size=0; s=0; ans=0; cin>>n; int i; ll x,y; for(i=1;i<=n;i++){ cin>>a[i]; s+=a[i]; h.set(a[i]); } while(h.size>1){ x=h.get(); y=h.get(); ans+=x+y; h.set(x+y); } //ans+=s; cout<<ans; }
-
02013-12-22 08:40:17@
这个题是不是有问题?
不是超级女友的 输入方式没给啊?
还是我理解错了?
有懂得回复下!!!
- 1
信息
- ID
- 1837
- 难度
- 6
- 分类
- (无)
- 标签
- (无)
- 递交数
- 51
- 已通过
- 14
- 通过率
- 27%
- 被复制
- 2
- 上传者