मान लीजिए कि हमारे पास n तत्वों के साथ एक सरणी A है। ए में या तो 0 या 1 तत्व हैं। एक पेड़ है। लगातार n दिनों में, यदि A[i] 0 है, तो इसे सींचा नहीं जाता है, यदि यह 1 है तो इसे सींचा जाता है, फूल निम्नलिखित तरीके से बढ़ता है -
-
यदि पेड़ को लगातार दो दिनों तक पानी नहीं दिया जाता है, तो वह मर जाता है
-
यदि पेड़ को सातवें दिन पानी पिलाया जाए, तो वह 1 सेमी बढ़ता है
-
यदि पेड़ को लगातार सातवें और (i+1)वें दिन पानी पिलाया जाता है, तो यह 1 सेमी के बजाय 5 सेमी बढ़ता है।
-
अगर इसे सातवें दिन पानी नहीं दिया गया, तो यह नहीं बढ़ेगा।
शुरुआत में, पेड़ 1 सेमी लंबा होता है। हमें n दिनों के बाद पेड़ की ऊंचाई ज्ञात करनी है। अगर यह मर जाता है, तो -1 लौटें।
तो, अगर इनपुट ए =[0, 1, 1] की तरह है, तो आउटपुट 7 होगा, क्योंकि पहले दिन, यह नहीं बढ़ेगा, इसलिए ऊंचाई 1 है, दूसरे दिन के बाद ऊंचाई 2 होगी, फिर तीसरे दिन के बाद यह 2 + 5 =7. हो जाएगा।
कदम
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
r := 1 y := 0 n := size of A for initialize i := 0, when i < n, update (increase i by 1), do: x := A[i] if r is same as -1, then: Ignore following part, skip to the next iteration if x is non-zero and y is non-zero, then: r := r + 5 otherwise when x is non-zero, then: (increase r by 1) otherwise when not x is non-zero and not y is non-zero and i > 0, then: r := -1 y := x return r
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; int solve(vector<int> A){ int r = 1; int y = 0; int n = A.size(); for (int i = 0; i < n; ++i){ int x = A[i]; if (r == -1) continue; if (x && y) r += 5; else if (x) ++r; else if (!x && !y && i > 0) r = -1; y = x; } return r; } int main(){ vector<int> A = { 0, 1, 1 }; cout << solve(A) << endl; }
इनपुट
{ 0, 1, 1 }
आउटपुट
7