Your Digits

Your Digits
Codeforces easy

يحتوي صندوق على بطاقات أرقام: \(k_2\) بطاقة عليها الرقم \(2\)، و \(k_3\) بطاقة عليها الرقم \(3\)، و \(k_5\) بطاقة عليها الرقم \(5\)، و \(k_6\) بطاقة عليها الرقم \(6\).

يمكنك أن تكوّن من البطاقات عددين فقط:

  • العدد \(32\)، ويستخدم بطاقة \(3\) واحدة وبطاقة \(2\) واحدة؛
  • العدد \(256\)، ويستخدم بطاقة \(2\) واحدة وبطاقة \(5\) واحدة وبطاقة \(6\) واحدة.

يمكنك تكوين كل عدد أي عدد من المرات، لكن كل بطاقة تُستخدم مرة واحدة على الأكثر. البطاقات التي لا تستخدمها لا تُحسب.

أوجد أكبر مجموع ممكن للأعداد التي تكوّنها.

القيود:

  • \(0 \le k_2, k_3, k_5, k_6 \le 5 \cdot 10^6\)

الإدخال:

  • سطر واحد: أربعة أعداد صحيحة \(k_2\) و \(k_3\) و \(k_5\) و \(k_6\).

المخرجات:

  • عدد صحيح واحد — أكبر مجموع ممكن.

مثال:

الإدخال:

5 1 3 4

المخرجات:

800

(نكوّن \(256\) ثلاث مرات و \(32\) مرة واحدة: \(256 + 256 + 256 + 32 = 800\). تبقى بطاقة \(2\) واحدة وبطاقة \(6\) واحدة دون استخدام.)

الحل

كل عدد \(256\) يضيف إلى المجموع أكثر من العدد \(32\)، وكلاهما يستخدم بطاقة \(2\). لذلك الأفضل أن نكوّن \(256\) أكبر عدد ممكن من المرات، ثم نكوّن \(32\) من البطاقات المتبقية.

العدد \(256\) يستخدم بطاقة \(2\) واحدة وبطاقة \(5\) واحدة وبطاقة \(6\) واحدة، لذلك يمكننا تكوينه \(k = \min(k_2, k_5, k_6)\) مرة على الأكثر. بعد ذلك تبقى \(k_3\) بطاقة \(3\) و \(k_2 - k\) بطاقة \(2\)، لذلك يمكننا تكوين \(32\) بالضبط \(\min(k_3, k_2 - k)\) مرة.

#include <iostream>
using namespace std;

int main() {
    int k2, k3, k5, k6;
    cin >> k2 >> k3 >> k5 >> k6;

    int k = min(min(k2, k5), k6);

    int solution = k * 256 + min(k3, k2 - k) * 32;
    cout << solution << '\n';
}