मान लीजिए कि हमारे पास n बिट्स के साथ एक बाइनरी स्ट्रिंग S है और दूसरा नंबर d है। एक संख्या रेखा पर, एक मेंढक बिंदु n पर पहुंचना चाहता है, जो बिंदु 1 से शुरू होता है। मेंढक d से अधिक दूरी पर दाईं ओर कूद सकता है। 1 से n तक प्रत्येक बिंदु के लिए यदि कोई लिली का फूल है तो इसे 1 के रूप में चिह्नित किया जाता है, और यदि नहीं तो 0 के रूप में चिह्नित किया जाता है। मेंढक केवल लिली के साथ बिंदुओं में कूद सकता है। हमें उन छलांगों की न्यूनतम संख्या ज्ञात करनी है जो मेंढक को n तक पहुँचने के लिए चाहिए। यदि संभव न हो, तो -1 लौटें।
तो, अगर इनपुट एस ="10010101" की तरह है; d =4, तो आउटपुट 2 होगा, क्योंकि स्थिति 1 से यह 4 पर कूदता है, फिर इंडेक्स 8(n) पर।
कदम
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
n := size of s x := 0 y := 0 while (x < n - 1 and y <= n), do: if s[x] is same as '1', then: x := x + d increase y by 1 Otherwise (decrease x by 1) if y >= n, then: return -1 Otherwise return y
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; int solve(string s, int d){ int n = s.size(); int x = 0, y = 0; while (x < n - 1 && y <= n){ if (s[x] == '1') x += d, ++y; else --x; } if (y >= n) return -1; else return y; } int main(){ string S = "10010101"; int d = 4; cout << solve(S, d) << endl; }
इनपुट
"10010101", 4
आउटपुट
2