একটি বাইনারি স্ট্রিং s দেওয়া আছে। আমাদের কাজ হলো স্ট্রিংটিতে শুধু '১' অক্ষর দিয়ে গঠিত সাবস্ট্রিংগুলির মোট সংখ্যা বের করা। ফলাফল বড় হতে পারে, তাই ১০⁹ + ৭ দিয়ে ভাগশেষ (mod) ফেরত দিতে হবে।
যেমন, ইনপুট s = "1011010" হলে আউটপুট হবে ৫ কারণ:
১. "১" - চারবার
২. "১১" - একবার
সমাধানের ধাপসমূহ
- m := 10⁹ + 7
- result := 0
- div := বাইনারি স্ট্রিংকে '০' দিয়ে ভাগ করে নিন (split করুন)।
- div-এর প্রতিটি x এর জন্য:
- যদি x খালি হয়, তবে পরবর্তী ইটারেশনের জন্য যান।
- result := result + (x-এর দৈর্ঘ্য × (x-এর দৈর্ঘ্য + 1)) / 2
- result mod m ফেরত দিন।
উদাহরণ
def solve(s):
m = 10**9 + 7
result = 0
for x in s.split('0'):
if not x:
continue
result += (len(x) * (len(x) + 1)) // 2
return result % m
s = "1011010"
print(solve(s))
ইনপুট
"1011010"
আউটপুট
5