ধরুন LOL বিশ্বে, টিমো নামে একটি হিরো আছে যার আক্রমণ তার শত্রু আশকে বিষক্রিয় অবস্থায় আনতে পারে। এখন, ধরুন আমাদের টিমোর আক্রমণের আরোহী টাইম সিরিজ দেওয়া আছে আশের দিকে এবং টিমোর প্রতিটি আক্রমণ প্রতি বিষক্রিয় করার সময়কাল, আমাদের আশ কতোটুকু সময় বিষক্রিয় অবস্থায় থাকে তা বের করতে হবে। আমরা ধরে নিতে পারি যে টিমো একটি নির্দিষ্ট টাইম পয়েন্টের শুরুতে আক্রমণ করে, এবং আশকে তৎক্ষণাৎ বিষক্রিয় অবস্থায় আনতে পারে।
ইনপুট হল [1,4] এবং 2, তবে আউটপুট হবে 4। কারণ টাইম পয়েন্ট 1-এ, টিমো আশকে আক্রমণ শুরু করে এবং আশকে তৎক্ষণাৎ বিষক্রিয় করে। এখানে এই বিষক্রিয় স্ট্যাটস ২ সেকেন্ড টাইম পয়েন্ট ২-এর শেষ পর্যন্ত চলবে। এবং টাইম পয়েন্ট 4-এ, টিমো আবার এই শত্রুকে আক্রমণ করে, এবং আশকে আরও ২ সেকেন্ডের জন্য বিষক্রিয় অবস্থায় আনতে পারে। তাই আপনাকে অবশেষে ৪ আউটপুট করতে হবে।
এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব −
- ret := ০ সেট করুন
- currEnd := -1
- n := t-এর আকার
- i = 0 থেকে n – ১ পর্যন্ত
- start := t[i], end := t[i] + d – 1
- যদি currEnd < start, তবে ret := ret + end – start + 1, currEnd = end,
- অন্যথায় ret := ret + end – currEnd, currEnd := end
- ret ফেরত দিন
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন −
উদাহরণ
#include <bits/stdc++.h> using namespace std; class Solution { public: int findPoisonedDuration(vector<int>& t, int d) { int ret = 0; int currEnd = -1; int n = t.size(); for(int i = 0; i < n; i++){ int start = t[i]; int end = t[i] + d - 1; if(currEnd < start){ ret += end - start + 1; currEnd = end; } else { ret += end - currEnd; currEnd = end; } } return ret; } }; main(){ vector<int> v = {1,4}; Solution ob; cout << (ob.findPoisonedDuration(v, 2)); }ইনপুট
[1,4] 4
আউটপুট
4