ধরুন আমাদের n উপাদান সহ একটি অ্যারে A আছে এবং আরেকটি সংখ্যা s আছে। টেবিলে একটি খালি জলের মগ এবং এন খালি জলের মগ রয়েছে৷ একটি খেলায়, কয়েকজন খেলোয়াড় থাকে। প্রতিটি পদক্ষেপে, একজন খেলোয়াড় একটি খালি মগ জল নেয় এবং তা থেকে সমস্ত জল কাপে ঢেলে দেয়। যদি এটি ওভারফিল হয়, প্লেয়ার হারিয়ে যাবে। তাদের সকলেই বিজয়ী হবেন কিনা তা আমাদের পরীক্ষা করতে হবে (কাপটি ওভারফিল হবে না)। যদি একটি আপ ইতিমধ্যেই সম্পূর্ণরূপে পূর্ণ হয়, তাহলে পরবর্তী খেলোয়াড় তার চালটি খেলবে না। এখানে s হল খালি কাপের ক্ষমতা এবং A[i] হল ith কাপে থাকা জলের পরিমাণ৷
সুতরাং, যদি ইনপুটটি A =[3, 1, 3] এর মত হয়; s =4, তাহলে আউটপুট True হবে, কারণ প্রথম এবং দ্বিতীয় প্লেয়ার দ্বারা, কাপটি পূর্ণ হবে। শেষের জন্য, খেলোয়াড় সেই চালটি খেলবে না।
পদক্ষেপ
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
k := 0 n := size of A sort the array A for initialize i := 0, when i < n - 1, update (increase i by 1), do: k := k + A[i] if k > s, then: return false Otherwise return true
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h> using namespace std; bool solve(vector<int> A, int s){ int k = 0; int n = A.size(); sort(A.begin(), A.end()); for (int i = 0; i < n - 1; i++) k += A[i]; if (k > s) return false; else return true; } int main(){ vector<int> A = { 3, 1, 3 }; int s = 4; cout << solve(A, s) << endl; }
ইনপুট
{ 3, 1, 3 }, 4
আউটপুট
1