30pts,已注释,求调
查看原帖
30pts,已注释,求调
676084
bfcktzj楼主2024/11/27 16:45
#include<bits/stdc++.h>
using namespace std;
int T,n,v;
int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%d",&n);
		long long t=0;
		long long m[3]={0};
		for(int i=1;i<=n;i++){
			scanf("%d",&v);
			t+=v/3,v%=3,m[v]++;//存储剩下的单牌和双牌数 
		}
		if(m[1]>=t){//3张的不够单牌 
			printf("%lld\n",m[1]+m[2]);
		}else{
			t-=m[1];
			if(m[2]*2>=t){//3张的不够双牌 
				m[2]=m[2]*2-t;
				m[2]=m[2]/2+m[2]%2;
				printf("%lld\n",m[1]+m[2]);
			}else{//3张的多了,每4个3可以只出3次,多余的1个要出2次,2个要出2次,3个要出3次
				t-=m[2]*2;
				m[1]=m[1]+(t/4)*3,t%=4;
				if(t==1) t++;
				printf("%lld\n",m[1]+m[2]*2+t);
			}
		}
	}
	return 0;
}
2024/11/27 16:45
加载中...