把所有的数字对3取模,分别记录0, 1, 2的个数为h0, h1, h2, 那么说有h0个数已经是三的倍数那么他们两两组合形成h0/2张卡片,取模结果为1的有h1张,结果为2的有h2张,它们能形成min(h1, h2)张卡片
#include <bits/stdc++.h>
#define maxn 200005
using namespace std;
typedef long long ll;
int main(){
int n, a;
int k0 = 0, k1 = 0, k2 = 0;
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d", &a);
if(a % 3 == 0)
k0++;
else if(a % 3 == 1)
k1++;
else
k2++;
}
printf("%d\n", k0 / 2 + min(k1, k2));
return 0;
}