Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Teemo โจมตีใน C ++


สมมุติว่าในโลก LOL มีฮีโร่ชื่อ Teemo และการโจมตีของเขาสามารถทำให้ Ashe ศัตรูของเขาติดพิษได้ สมมติว่าเราได้ให้อนุกรมเวลาที่โจมตีของ Teemo จากน้อยไปมากไปหา Ashe และระยะเวลาการเป็นพิษต่อการโจมตีของ Teemo เราต้องหาเวลาทั้งหมดที่ Ashe อยู่ในสภาพเป็นพิษ เราสามารถสรุปได้ว่า Teemo โจมตีที่จุดเริ่มต้นของจุดเวลาที่กำหนด และทำให้ Ashe อยู่ในสภาพที่เป็นพิษทันที

อินพุตเป็นเหมือน [1,4] และ 2 จากนั้นผลลัพธ์จะเป็น 4 นี่เป็นเพราะ ณ จุดที่ 1 Teemo เริ่มโจมตี Ashe และทำให้ Ashe ถูกวางยาพิษทันที สถานะพิษนี้จะคงอยู่ 2 วินาทีจนถึงจุดสิ้นสุดของเวลาที่ 2 และ ณ จุดที่ 4 Teemo จะโจมตีศัตรูนี้อีกครั้ง และทำให้ Ashe อยู่ในสถานะเป็นพิษเป็นเวลา 2 วินาที ในที่สุดคุณต้องส่งออก 4

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ตั้งค่า ret :=0
  • currEnd :=-1
  • n :=ขนาดของ t
  • สำหรับ i ในช่วง 0 ถึง n – 1
    • เริ่มต้น :=t[i], สิ้นสุด :=t[i] + d – 1
    • ถ้า currEnd
    • มิฉะนั้น ret :=ret + end – currEnd, currEnd :=end
  • คืนสินค้า

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#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