2 条题解
-
1
#include <bits/stdc++.h> using namespace std; int h[100005],sz; void up(int i){ for(;i>1&&h[i]<h[i/2];i/=2)swap(h[i],h[i/2]); } void down(int i){ for (int s;(s=i*2)<=sz;i=s){ if(s+1<=sz&&h[s+1]<h[s])s++; if(h[i]<=h[s])break; swap(h[i],h[s]); } } void push(int x){ h[++sz]=x;up(sz); } int pop(){ int r=h[1];h[1]=h[sz--];down(1);return r; } int main(){ int n,x;long long ans=0; cin>>n; while(n--){ cin>>x;push(x); } while(sz>1){ int a=pop(),b=pop(); ans+=a+b;push(a+b); } cout<<ans; return 0; } -
1
本题需要加freopen
代码
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<queue> #include<vector> using namespace std; priority_queue <int,vector<int>,greater<int> > q; int main(){ freopen("fruit.in","r",stdin); freopen("fruit.out","w",stdout); int n; cin>>n; for(int i=1;i<=n;i++){ int x; cin>>x; q.push(x); } long long ans=0; while(--n){ int t = 0; t += q.top(); q.pop(); t += q.top(); q.pop(); ans += t; q.push(t); } cout<<ans; fclose(stdin); fclose(stdout); return 0; }
- 1
信息
- ID
- 675
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 8
- 标签
- 递交数
- 234
- 已通过
- 39
- 上传者