สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n A มีธาตุ 0 หรือ 1 มีต้นไม้ ใน n วันติดต่อกัน หาก A[i] เป็น 0 แสดงว่าไม่มีการรดน้ำ หากเป็น 1 ก็ถูกรดน้ำ ดอกไม้ก็จะเติบโตในลักษณะต่อไปนี้ −
-
ถ้าไม่รดน้ำต้นไม้สองวันติดก็ตาย
-
ถ้ารดน้ำต้นไม้จะโต 1 ซม.
-
หากรดน้ำต้นไม้ในวันที่ (i+1) ติดต่อกัน ต้นไม้จะเติบโต 5 ซม. แทนที่จะเป็น 1 ซม.
-
ถ้าไม่รดน้ำวันก็ไม่โต
ต้นนั้นยาว 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
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#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