思路和题解是一样的,感觉算法是正确的,但是不理解为什么溢出
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=1e6+10;
ll a[N];
ll num[10];
int t,n,ans;
int main(){
ios::sync_with_stdio(false);
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
num[3]+=a[i]/3;
a[i]%=3;
if(a[i]==2)
num[2]++;
if(a[i]==1)
num[1]++;
}
if(num[3]<=(num[1]+num[2]*2)){
if(num[3]<=num[1])
ans=num[1]+num[2];
else
ans=num[2]-(num[3]-num[1])/2+num[3];
}
else{
ll temp=num[3]-num[2]*2-num[1];
if(temp%4==1)
ans=num[1]+num[2]*2+ceil((3.0*temp)/4)+1;
else
ans=num[1]+num[2]*2+ceil((3.0*temp)/4);
}
cout<<ans<<"\n";
ans=0;
memset(num,0,sizeof(num));
memset(a,0,sizeof(a));
}
return 0;
}