ধনাত্মক সংখ্যার একটি অ্যারে এবং দুটি পূর্ণসংখ্যা A এবং B দেওয়া হয়েছে। দুই খেলোয়াড় একটি গেম খেলছে যেখানে তারা অ্যারের সংখ্যা কমিয়ে দেবে। প্লেয়ার 1 অ্যারের যেকোন উপাদান A দ্বারা কমাতে পারে এবং প্লেয়ার 2 অ্যারের যেকোন উপাদান B দ্বারা বাড়াতে পারে৷ লক্ষ্য হল এমন সংখ্যার গণনা খুঁজে বের করা যা প্লেয়ার 1 দ্বারা 0 বা তার কম হতে পারে৷ প্রথম প্লেয়ারটি তৈরি করে প্রথম পদক্ষেপ সংখ্যাটি একবার 0 বা তার কম হলে প্লেয়ার 2 দ্বারা বিবেচনা করা যাবে না।
উদাহরণস্বরূপ
ইনপুট
arr[] = { 1,4,5,2 } A=2, B=3
আউটপুট
Count of numbers that can be reduced to zero or less in a game are: 1
ব্যাখ্যা
The only number that can be reduced by player 1 is 1 as on first move it will be reduced to −1. Rest all will become greater than A after player 2 increases their value.
ইনপুট
arr[] = { 1,4,5,2 } A=4, B=4
আউটপুট
Count of numbers that can be reduced to zero or less in a game are: 2
ব্যাখ্যা
On first move player 1 reduces 4 to 0. arr[]= [ 1, 0, 5, 2 ] Player 2 will increase 1 to 4. arr[]= [ 5, 0, 5, 2 ] Player 1 will decrease 2 to −2. Arr[] = [ 5, 0, 5, −2 ]. From now onwards all numbers are greater than A so cannot be reduced by player 1 to 0 or less as player 2 is also increasing them simultaneously.
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি −
এই পদ্ধতিতে প্রথমে A> B কিনা তা পরীক্ষা করুন। যদি হ্যাঁ হয় তবে N চালে A arr[] এর সমস্ত N উপাদানকে 0 বা তার কম কমিয়ে দেবে। যদি A<=B হয় তবে আমরা পরীক্ষা করব
-
প্লেয়ার 2 তাদের সাথে B যোগ করার পরেও যে সমস্ত সংখ্যা A এর থেকে বড় হয় না। এই গণনাটিকে C1 হিসাবে ধরা যাক।
-
যে সমস্ত সংখ্যা A থেকে ছোট এবং প্লেয়ার 2 তাদের সাথে B যোগ করার পরে A থেকে বড় হয়ে যায়। এই গণনাটিকে C2 হিসাবে ধরা যাক।
মোট গণনা হবে C=C1+ (C2+1)/2। কেস 2 এর মতো, উভয় প্লেয়ার একই সাথে তাদের বাড়া/কমালে এর মধ্যে মাত্র অর্ধেক 0 বা তার কম হবে। এবং প্লেয়ার 2 তাদের অর্ধেক A এর চেয়ে বেশি বাড়াতে পারে। ইতিমধ্যে, প্লেয়ার 1 বাকি অর্ধেক <=0 কমিয়ে দেবে।
-
ধনাত্মক সংখ্যা সম্বলিত একটি পূর্ণসংখ্যা বিন্যাস নিন।
-
A এবং B দুটি ভেরিয়েবল নিন।
-
ফাংশন হ্রাসকৃত_শূন্য(int arr[], int size, int A, int B) একটি গেমে শূন্য বা তার চেয়ে কম করা যেতে পারে এমন সংখ্যা গণনার গণনা প্রদান করবে।
-
0 হিসাবে প্রাথমিক গণনা নিন।
-
সাময়িক গণনা হিসাবে দুটি ভেরিয়েবল temp_1 এবং temp_2 নিন।
-
A> B হলে অ্যারের দৈর্ঘ্য ফেরত দিন যা আকার।
-
এখন লুপ ব্যবহার করে ট্রাভার্স অ্যারে, প্রতিটি arr[i] এর জন্য যদি উপাদানের যোগফল এবং B
-
প্রতিটি উপাদানের জন্য arr[i] <=A, increment temp_2.
-
এখন a for loop শেষ হওয়ার পর, 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<<"Count of numbers that can be reduced to zero or less in a game are: "<<reduced_zero(arr, size, A, B); return 0; }
আউটপুট
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −
উৎপন্ন করবেCount of numbers that can be reduced to zero or less in a game are: 7