niromru

B. Такси

Oct 28th, 2021
668
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <minmax.h>
  3. using namespace std;
  4.  
  5. int t, k, a;
  6. int gr[4] = { 0, 0, 0, 0 };
  7.  
  8. void main()
  9. {
  10.     cin >> t;
  11.     while (t--) {
  12.         int v;
  13.         cin >> v;
  14.         gr[v - 1]++;
  15.     }
  16.     // [4 места в такси]
  17.     // 4
  18.     k += gr[3];
  19.     gr[3] = 0;
  20.     // 3 1
  21.     a = min(gr[2], gr[0]);
  22.     k += a;
  23.     gr[2] -= a;
  24.     gr[0] -= a;
  25.     // 2 2
  26.     a = (int)(gr[1] / 2);
  27.     k += a;
  28.     gr[1] -= 2 * a;
  29.     // 2 1 1
  30.     a = min(gr[1], (int)(gr[0] / 2));
  31.     k += a;
  32.     gr[1] -= a;
  33.     gr[0] -= 2 * a;
  34.     // 1 1 1 1
  35.     a = (int)(gr[0] / 4);
  36.     k += a;
  37.     gr[0] -= 4 * a;
  38.     // [3 места в такси]
  39.     // 3
  40.     k += gr[2];
  41.     gr[2] = 0;
  42.     // 2 1
  43.     a = min(gr[1], gr[0]);
  44.     k += a;
  45.     gr[1] -= a;
  46.     gr[0] -= a;
  47.     // 1 1 1
  48.     a = (int)(gr[0] / 3);
  49.     k += a;
  50.     gr[0] -= 3 * a;
  51.     // [2 места в такси]
  52.     // 2
  53.     k += gr[1];
  54.     gr[1] = 0;
  55.     // 1 1
  56.     a += (int)(gr[0] / 2);
  57.     k += a;
  58.     gr[0] -= 2 * a;
  59.     // [1 место в такси]
  60.     // 1
  61.     k += gr[0];
  62.     gr[0] = 0;
  63.     cout << k;
  64. }
RAW Paste Data