- 合并果子
- 2017-12-04 21:17:26 @
#include<cstdio>
#include<cstring>
int n;
int a[10010];
void sdown(int x)
{
int f,s,t=x;
f=x;s=f*2;
if(s<=n&&a[f]>a[s])t=s;
if(s+1<=n&&a[t]>a[s+1])t=s+1;
if(t!=x)
{
int k=a[f];a[f]=a[t];a[t]=k;
f=t;sdown(t);
}
else return ;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=n/2;i>=1;i--)
{
sdown(i);
}
int ans=0,k;
while(n>1)
{
k=0;
ans+=a[1];k+=a[1];
a[1]=a[n];n--;sdown(1);
ans+=a[1];k+=a[1];
a[1]=k; sdown(1);k=0;
}
printf("%d",ans);
return 0;
}**
3 条评论
-
HigHwind LV 8 @ 2018-01-22 17:15:04
别在 讨论区 发题解
-
2018-01-16 16:44:18@
对啊,这道题只要基数排序+双单调队列就好了
-
2017-12-05 13:20:49@
/* 用```cpp ``` 括起来发代码... */
- 1