60pts思路和题解一样,感觉算法没问题,但是错了,而且还溢出
查看原帖
60pts思路和题解一样,感觉算法没问题,但是错了,而且还溢出
931633
742643qh楼主2024/11/24 16:55

思路和题解是一样的,感觉算法是正确的,但是不理解为什么溢出

#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;
}
2024/11/24 16:55
加载中...