题目:
题意:
每种长度为
2
i
−
1
2^{i-1}
2i−1的木棍有
x
i
x_i
xi
在不重复使用的情况下,我们能做多构造出多少个三角形
分析:
因为题面的木棍的特殊性,我们发现,能构成三角形的三个木棍一定是这样的
(
2
j
,
2
i
,
2
i
)
(
j
<
=
i
)
(2^j,2^i,2^i)(j<=i)
(2j,2i,2i)(j<=i)
所以先将零散的木棍和比较大的两个相同长度的木棍拼成一个三角形
剩下的再按照上边的式子求出来
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
#define LL long long
using namespace std;
inline LL read()
{
LL s=0,f=1; char c=getchar();
while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') {s=s*10+c-'0';c=getchar();}
return s*f;
}
LL a[300005],ans=0,rest=0;
int main()
{
LL n=read();
for(LL i=1;i<=n;i++) a[i]=read();
for(LL i=n;i;i--)
{
rest+=a[i]/2;
if((a[i]%2)&&rest) ans++,rest--;
}
cout<<ans+2*rest/3;
return 0;
}