题目
https://pintia.cn/problem-sets/994805342720868352/problems/994805350316752896
题解
从给出的N段绳子中任选两段打结,打结后变为一条绳子但长度减半,最终合并为一条绳子,求最终绳子的最长长度
代码解析
因为绳子每参与一次打结,长度就会减半,所以我们要把长的绳子放在后面打结,最长的放在最后只让它打结一次(长度只少了一半,否则会更多),这样就能得到最长的绳子了
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
double sum=a[0];
for(int i=1;i<n;i++)
{
sum=(sum+a[i])/2;
}
cout<<(int)sum;
}
注意
看了别人的文章,sum的类型一开始设为int也是对的,似乎是题目有点歧义,不过既然都对就无所谓了