एक बाइनरी सरणी arr[] और दो चर a और b दिए गए हैं जिनके कुछ प्रारंभिक मान हैं। सरणी arr[] में एक तत्व को पार करने के दो तरीके हैं -
- यदि arr[i] == 1, तो a से 1 इकाई का उपयोग किया जा सकता है, जिससे b में कोई परिवर्तन नहीं होगा। यदि b से 1 इकाई का उपयोग किया जाता है, तो a 1 इकाई से बढ़ जाता है। (ध्यान दें कि a का मान उसके मूल मान से अधिक नहीं बढ़ाया जा सकता।)
- यदि arr[i] == 0, तो a या b से 1 इकाई का उपयोग किया जा सकता है।
आइए अब एक उदाहरण का उपयोग करके समझते हैं कि हमें क्या करना है -
इनपुट
arr[] = {0, 0, 0, 1, 1}, a = 2, b = 2
आउटपुट
5
व्याख्या
पहले तत्व को पार करने के लिए, a से 1 इकाई का उपयोग करें (a = 1, b = 2)।
दूसरे तत्व को पार करने के लिए, a से 1 इकाई का उपयोग करें (a = 0, b = 2)।
तीसरे तत्व को पार करने के लिए, b से 1 इकाई का उपयोग करें (a = 0, b = 1)।
चौथे तत्व को पार करने के लिए, b से 1 इकाई का उपयोग करें जो a को 1 इकाई से बढ़ाता है (a = 1, b = 0)।
पांचवें तत्व को पार करने के लिए, a से 1 इकाई का उपयोग करें (a = 0, b = 0)।
इसलिए, हमने सभी तत्वों को पार कर लिया और आउटपुट 5 हो जाता है।
इनपुट
arr[] = {1, 1, 1, 0, 1}, a = 1, b = 2
आउटपुट
4
नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण इस प्रकार है
- MaxElements() फ़ंक्शन में Oa = 0 और max = 0 प्रकार के int चर आरंभ करें ताकि a का मूल मान और अंतिम उत्तर क्रमशः संग्रहीत हो सके।
- i = 0 से i < size तक लूप करें ताकि सरणी में प्रत्येक तत्व की जांच की जा सके।
- पहले जांचें कि क्या a और b दोनों शून्य के बराबर हैं, तो लूप से बाहर निकलें।
- अन्यथा जांचें कि क्या (a == 0) और यदि हां, तो जांचें कि क्या वर्तमान तत्व = 1 है और उस तत्व को पार करने के लिए b से 1 घटाएं और a = min(Oa, a + 1) रखें ताकि a अपने मूल मान से अधिक न हो। अन्यथा बस a को प्रभावित किए बिना b से 1 घटाएं।
- अन्यथा जांचें कि क्या (b == 0) और यदि हां, तो बस a से 1 घटाएं।
- अन्यथा जांचें कि क्या (arr[i] == 1 && a < Oa) और यदि हां, तो जांचें कि क्या वर्तमान तत्व = 1 है और उस तत्व को पार करने के लिए b से 1 घटाएं और a = min(Oa, a + 1) रखें।
- अन्यथा बस a से 1 घटाएं और max बढ़ाएं।
- लूप के बाहर, max वापस करें।
कार्यक्रम उदाहरण
#include <bits/stdc++.h>
using namespace std;
int MaxElements(int arr[], int a, int b, int size){
// Oa में a का मूल मान होगा
int Oa = a;
int max = 0;
// बाइनरी सरणी में पुनरावृति करें
for (int i = 0; i < size; i++){
// लूप तोड़ें यदि a और b दोनों = 0 हैं
if (a == 0 && b == 0)
break;
// यदि a मौजूद नहीं है, तो b का उपयोग करें
else if (a == 0){
// यदि arr[i] == 1 तो a को 1 से बढ़ाएं
if (arr[i] == 1){
b -= 1;
// जांचें कि मूल मान पार नहीं हुआ है
a = min(Oa, a + 1);
}
else
b -= 1;
}
// यदि b मौजूद नहीं है, तो a का उपयोग करें
else if (b == 0)
a--;
// यदि arr[i] == 1, b का उपयोग करें
else if (arr[i] == 1 && a < Oa){
b -= 1;
a = min(Oa, a + 1);
}
else
a--;
max++;
}
return max;
}
// main फ़ंक्शन
int main(){
int arr[] = { 1, 1, 1, 0, 1 };
int size = sizeof(arr) / sizeof(arr[0]);
int a = 1;
int b = 2;
cout << MaxElements(arr, a, b, size);
return 0;
}
आउटपुट
4