ধরুন আমাদের একটি স্ট্রিং s এবং দুটি মান x এবং y আছে। আমরা যে কোন সংখ্যক বার দুই ধরনের অপারেশন করতে পারি।
-
সার্চ সাবস্ট্রিং "ab", যদি উপস্থিত থাকে, তাহলে আমরা এটিকে সরিয়ে x পয়েন্ট অর্জন করতে পারি।
-
সার্চ সাবস্ট্রিং "ba", যদি উপস্থিত থাকে, তাহলে আমরা এটিকে সরিয়ে y পয়েন্ট অর্জন করতে পারি।
উপরোক্ত ক্রিয়াকলাপগুলি s-এ প্রয়োগ করার পরে আমাদের সর্বাধিক পয়েন্টগুলি খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি s ="cbbaacdeabb" x =4 y =5 এর মত হয়, তাহলে আউটপুটটি 14 হবে কারণ প্রাথমিক স্ট্রিং হল "cbbaacdeabb", তারপর 4 পেতে "cbbaacde(ab)b" সরিয়ে ফেলুন, এখন স্ট্রিং " cbbaacdeb", তারপরে আরও 5 পেতে "cb(ba)acdeb" মুছে ফেলুন, তাই বর্তমান স্কোর 4+5 =9, এখন স্ট্রিং হল "cbacdeb", তারপর আবার "c(ba)cdeb" মুছে ফেলুন, অতিরিক্ত 5 পেতে তাই বর্তমান স্কোর 9+5=14, এবং স্ট্রিং হল "ccdeb", এখন এর পরে সরানোর কিছু নেই৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- a :='a', b :='b'
- উত্তর :=0, a_st :=0, b_st :=0
- যদি y> x হয়, তাহলে
- a এবং b অদলবদল করুন
- x এবং y অদলবদল করুন
- s-এ প্রতিটি c-এর জন্য, করুন
- যদি c হয় a এর মত, তাহলে
- a_st :=a_st + 1
- অন্যথায় যখন c হয় b এর মত, তারপর
- যদি a_st অ-শূন্য হয়, তাহলে
- উত্তর :=ans + x
- a_st :=a_st - 1
- অন্যথায়,
- b_st +=1
- যদি a_st অ-শূন্য হয়, তাহলে
- অন্যথায়,
- উত্তর :=ans + y * ন্যূনতম a_st এবং b_st
- a_st :=0
- b_st :=0
- যদি c হয় a এর মত, তাহলে
- উত্তর দিন + y * সর্বনিম্ন a_st এবং b_st
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(s, x, y): a = 'a' b = 'b' ans = 0 a_st = 0 b_st = 0 if y > x: a,b = b,a x,y = y,x for c in s: if c == a: a_st += 1 elif c == b: if a_st: ans += x a_st -= 1 else: b_st += 1 else: ans += y * min(a_st, b_st) a_st = 0 b_st = 0 return ans + y * min(a_st, b_st) s = "cbbaacdeabb" x = 4 y = 5 print(solve(s, x, y))
ইনপুট
"cbbaacdeabb", 4, 5
আউটপুট
14