मान लीजिए हमारे पास n तत्वों की एक सरणी A है। A में तत्व या तो 0 या 1 हैं। एक पेड़ है। लगातार n दिनों में, यदि A[i] 0 है तो इसे पानी नहीं दिया जाता, यदि यह 1 है तो इसे पानी दिया जाता है, फूल निम्नलिखित तरीके से बढ़ता है:
यदि पेड़ को लगातार दो दिनों तक पानी नहीं दिया जाता, तो यह मर जाता है
यदि पेड़ को iवें दिन पानी दिया जाता है, तो यह 1 सेमी बढ़ता है
यदि पेड़ को iवें और (i+1)वें दिन लगातार पानी दिया जाता है, तो यह 1 सेमी के बजाय 5 सेमी बढ़ता है।
यदि इसे iवें दिन पानी नहीं दिया जाता, तो यह नहीं बढ़ेगा।
शुरुआत में, पेड़ 1 सेमी लंबा है। हमें n दिनों के बाद पेड़ की ऊंचाई ढूंढनी है। यदि यह मर जाता है, तो -1 वापस करें।
उदाहरण के लिए, यदि इनपुट A = [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
उदाहरण
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
#includeusing namespace std; int solve(vector 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 A = { 0, 1, 1 }; cout << solve(A) << endl; }
इनपुट
{ 0, 1, 1 }आउटपुट
7