fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define int long long
  5.  
  6. const int MaxN = (int)1e6 + 5;
  7. const int MOD = (int)1e9 + 7;
  8.  
  9. int n;
  10. int s[MaxN];
  11. int cnt[MaxN];
  12. int ans;
  13.  
  14. signed main(){
  15. ios::sync_with_stdio(0);
  16. cin.tie(0);
  17. cin >> n;
  18. for(int i = 1; i <= n; i++){
  19. cin >> s[i];
  20. cnt[s[i]]++;
  21. }
  22. sort(s + 1, s + 1 + n, greater<int>());
  23. for(int i = 1; i <= n; i++){
  24. if(s[i] == 4 && cnt[4] >= 1){
  25. ++ans;
  26. cnt[4]--;
  27. }
  28. else if(s[i] == 3 && cnt[1] >= 1 && cnt[3] >= 1){
  29. ++ans;
  30. cnt[3]--;
  31. cnt[1]--;
  32. }
  33. else if(s[i] == 3 && cnt[1] == 0 && cnt[3] >= 1){
  34. ++ans;
  35. cnt[3]--;
  36. }
  37. else if(s[i] == 2 && cnt[2] >= 2){
  38. ++ans;
  39. cnt[2] -= 2;
  40. }
  41. else if((s[i] == 2 && cnt[1] >= 2 && cnt[2] >= 1)){
  42. ++ans;
  43. cnt[2]--;
  44. cnt[1] -= 2;
  45. }
  46. else if(s[i] == 2 && cnt[1] >= 1 && cnt[2] >= 1){
  47. ++ans;
  48. --cnt[2]; --cnt[1];
  49. }
  50. else if(s[i] == 2 && cnt[2] >= 1 && cnt[1] == 0){
  51. ++ans;
  52. cnt[2]--;
  53. }
  54. else if(s[i] == 1 && cnt[1] >= 1){
  55. int b = 1;
  56. while(b <= 4 && cnt[1] > 0){
  57. --cnt[1];
  58. ++b;
  59. }
  60. ++ans;
  61. }
  62. }
  63. cout << ans;
  64. return 0;
  65. }
  66.  
Success #stdin #stdout 0s 5296KB
stdin
Standard input is empty
stdout
Standard output is empty