int n;
    cin >> n;
    vector<int> counter(5, 0), nums(n);
    for (int i = 0; i < n; i++) {
      cin >> nums[i];
      if (nums[i] % 4 == 0)
        counter[4]++;
      else if (nums[i] % 2 == 0)
        counter[2]++;
      else
        counter[1]++;
    }
    int d = counter[1] + (counter[2] >= 1);
    if (d - counter[4] > 1)
      cout << "No" << endl;
    else
      cout << "Yes" << endl;


贴个我的,唯一AC的题目。只要统计1的和4的个数,2只需要统计其是否出现。
2必须全部放在一起,可把全部放在一起的2看作是1个1。那么只需要考虑4的数目和1的数目之间的关系了。