Twins
Twins
لديك مصفوفة \(A\) تحتوي على \(N\) أعداد صحيحة، حدد أقل عدد من العناصر التي يجب اختيارها من \(A\) بحيث يكون مجموع العناصر المختارة أكبر من مجموعة العناصر المتبقية.
Solution
أولاً، احسب مجموع المصفوفة، والذي سنسميه total_sum.
بما أننا نريد اختيار الحد الأدنى من العناصر، نريد أخذ أكبر العناصر أولاً. للقيام بذلك، نقوم بترتيب المصفوفة بترتيب تصاعدي نقوم بالمرور عليها بشكل عكسي (من n - 1 إلى 0) مع الحفاظ على قيمتين:
selected_sum— مجموع العناصر التي اخترناها حتى الآن
cnt— عدد العناصر المختارة
في كل خطوة، نتحقق مما إذا كان selected_sum > total_sum - selected_sum. إذا تحقق الشرط، نطبع cnt ونتوقف عن البرنامج.
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
int a[n];
int total_sum = 0;
for (int i = 0; i < n; i++) {
cin >> a[i];
total_sum += a[i];
}
sort(a, a + n);
int selected_sum = 0;
int cnt = 0;
for (int i = n - 1; i >= 0; i--) {
selected_sum += a[i];
cnt++;
if (selected_sum > total_sum - selected_sum) {
cout << cnt << endl;
break;
}
}
}