একটি ধনাত্মক সংখ্যার অ্যারে এবং দুটি ইন্টিজার A এবং B দেওয়া আছে। দুই খেলাড় একটি গেম খেলছে যাতে তারা অ্যারেতে থাকা সংখ্যাগুলো কমাবে। খেলাড় ১ যেকোনো এলিমেন্টকে A দিয়ে কমাতে পারবে এবং খেলাড় ২ যেকোনো এলিমেন্টকে B দিয়ে বাড়াতে পারবে। লক্ষ্য হলো খেলাড় ১ কতগুলো সংখ্যাকে ০ বা ঋণাত্মক করতে পারবে সেটি বের করা। প্রথম মুভ খেলাড় ১ করবে। একবার কোনো সংখ্যা ০ বা ঋণাত্মক হলে সেটি খেলাড় ২ বিবেচনা করবে না।
উদাহরণ ১
ইনপুট
arr[] = { 1,4,5,2 } A=2, B=3
আউটপুট
গেমে শূন্য বা ঋণাত্মক হতে পারা সংখ্যাগুলোর সংখ্যা: 1
ব্যাখ্যা
খেলাড় ১ শুধু ১ কে কমাতে পারবে কারণ প্রথম মুভে সেটি -১ হয়ে যাবে। বাকিগুলো খেলাড় ২ বাড়িয়ে A-র চেয়ে বড় করে দেবে।
উদাহরণ ২
ইনপুট
arr[] = { 1,4,5,2 } A=4, B=4
আউটপুট
গেমে শূন্য বা ঋণাত্মক হতে পারা সংখ্যাগুলোর সংখ্যা: 2
ব্যাখ্যা
প্রথম মুভে খেলাড় ১, ৪ কে ০ করবে। arr[] = [1, 0, 5, 2]। খেলাড় ২, ১ কে ৪ করবে। arr[] = [5, 0, 5, 2]। খেলাড় ১, ২ কে -২ করবে। arr[] = [5, 0, 5, -2]। এখন সব সংখ্যা A-র চেয়ে বড় তাই খেলাড় ১ আর কমাতে পারবে না।
প্রয়োগ করা পদ্ধতি
এই পদ্ধতিতে প্রথমে চেক করা হয় A > B কিনা। যদি হয়, তবে N মুভে A সকল N এলিমেন্টকে ০ বা ঋণাত্মক করবে। যদি A <= B হয়, তবে চেক করা হয়:
সকল সংখ্যা যারা খেলাড় ২
Bযোগ করলেওA-র চেয়ে বড় হয় না। এটিকেC1ধরি।সকল সংখ্যা যারা
A-র চেয়ে ছোট কিন্তু খেলাড় ২Bযোগ করলেA-র চেয়ে বড় হয়ে যায়। এটিকেC2ধরি।
মোট কাউন্ট = C = C1 + (C2+1)/2। কারণ কেস ২-এ শুধু অর্ধেকই ০ বা ঋণাত্মক হবেন যেহেতু দুজন খেলাড়ই একসাথে বাড়া/কমাচ্ছে। এবং খেলাড় ২ শুধু অর্ধেক কে A-র চেয়ে বড় করতে পারবে। এই meioखেলাড় ১ বাকি অর্ধেক কে <=০ করবে।
ধনাত্মক সংখ্যার ইন্টিজার অ্যারে নিন।
দুটি ভেরিয়েবল
AএবংBনিন।reduced_zero(int arr[], int size, int A, int B)ফাংশনটি সংখ্যা রিটার্ন করে।আরম্ভিক কাউন্ট ০ রাখুন।
দুটি ভেরিয়েবল
temp_1এবংtemp_2অস্থায়ী কাউন্ট হিসেবে নিন।যদি
A > Bহয় তবে অ্যারের দৈর্ঘ্যsizeরিটার্ন করুন।এখন
forলুপ দিয়ে অ্যারে ট্রুভার্স করুন, প্রতিটিarr[i]এর জন্য যদি এলিমেন্ট +B < Aহয় তবেtemp_1বাড়ান।প্রতিটি এলিমেন্ট
arr[i] <= Aহলেtemp_2বাড়ান।forলুপ শেষেcount = temp_1 + (temp_2+1)/2ক্যালকুলেট করুন সূত্র অনুযায়ী।কাউন্ট রিটার্ন করুন ফলাফল হিসেবে।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
int reduced_zero(int arr[], int size, int A, int B) {
int count = 0;
int temp_1 = 0, temp_2 = 0;
if (A > B) {
return size;
}
for(int i = 0; i < size; i++) {
if (A >= arr[i] + B) {
temp_1++;
} else if(A >= arr[i]) {
temp_2++;
}
}
int temp = (temp_2 + 1) / 2;
count = temp + temp_1;
return count;
}
int main() {
int arr[] = { 3, 3, 1, 2, 4, 7, 1};
int A = 4, B = 1;
int size = sizeof(arr) / sizeof(arr[0]);
cout << "গেমে শূন্য বা ঋণাত্মক হতে পারা সংখ্যাগুলোর সংখ্যা: " << reduced_zero(arr, size, A, B);
return 0;
}
আউটপুট
উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি আসবে:
গেমে শূন্য বা ঋণাত্মক হতে পারা সংখ্যাগুলোর সংখ্যা: 7