拜谢,RT
#include<bits/stdc++.h>
#define ll unsigned long long
using namespace std;
inline ll read()
{
char c=getchar();ll x=0,f=1;
while(c<'0' or c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0' and c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
ll k[300005];ll step,third,doble;ll ans;
ll x[300005],y[300005];ll num=0,dg=0;
int main()
{
int t;t=read();ll a;
for(int ii=1;ii<=t;ii++)
{
a=read();step=0;num=0;dg=0;third=0;doble=0;ans=0;
for(int i=1;i<=a;i++)k[i]=read();
sort(k+1,k+a+1,greater<int >() );
for(int i=1;i<=a;i++)
{
if(k[i]>4){third+=k[i]/3,y[i]=k[i]%3;num++;if(y[i]==2)doble++;if(y[i]==1)dg++;}
else break;
} //>4
for(int i=1;i<=a;i++){if(k[i]==4)ans++;} //=4
for(int i=1;i<=a;i++){if(k[i]==3)third++;}//=3
for(int i=a;i>=1;i--){if(k[i]==1){dg++;}} //=1
for(int i=1;i<=a;i++){if(k[i]==2)doble++;}//=2
// cout<<endl<<ans<<endl<<dg<<endl<<doble<<endl<<third<<endl;cout<<endl;
for(int i=1;i<=dg;i++){ans++;third--;if(third==0){dg-=i;break;}} //3 and 1
if(third==0){ans+=dg;ans+=doble;printf("%lld\n",ans);continue;} //hua wan le
else {doble*=2;if(third>doble){third-=doble;ans+=doble;ans+=(third/4*4+third%4);if(third%4==1)ans++;}
else {ans+=third;doble-=third;ans+=(doble+1)/2;}}//mei hua wan
printf("%lld\n",ans);
}
return 0;
}