这道题很简单(C++)

#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 条评论

  • @ 2018-01-22 17:15:04

    别在 讨论区 发题解

  • @ 2018-01-16 16:44:18

    对啊,这道题只要基数排序+双单调队列就好了

  • @ 2017-12-05 13:20:49
    /*
        用```cpp
          ```
        括起来发代码...
    */
    
  • 1

信息

ID
1097
难度
6
分类
贪心 点击显示
标签
递交数
23915
已通过
6335
通过率
26%
被复制
41
上传者