传送门
解题思路:三角形的形状只有两种(2 ^ i, 2 ^ i, 2 ^ i)或者(2 ^ i, 2 ^ i, 2 ^ j)(i>j),不可能有三个边都不同的,因为是2的幂次,这样不可能构成三角形。用之前剩下的来构成三角形即采用(2 ^ i, 2 ^ i, 2 ^ j)(i>j)是更好的,对当前的i消耗少,也能得到更多的三角形,然后再去考虑(2 ^ i, 2 ^ i, 2 ^ i)的。
#include<bits/stdc++.h>
#define il inline
#define pb push_back
#define fi first
#define se second
#define ms(_data,v) memset(_data,v,sizeof(_data))
#define sc(n) scanf("%d",&n)
#define SC(n,m) scanf("%d %d",&n,&m)
#define sz(a) int((a).size())
#define rep(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
ll n,x;
int main(){
std::ios::sync_with_stdio(0);
ll ans=0,prenum=0;
cin>>n;
rep(i,1,n){
cin>>x;
ll mi=min(prenum,x/2);
x-=mi*2,prenum-=mi;
ans+=mi+x/3;
prenum+=x%3;
}
cout<<ans<<endl;
return 0;
}