Computer >> Máy Tính >  >> Lập trình >> C ++

Tấn công Teemo trong C ++

Giả sử trong thế giới LOL, có một anh hùng tên là Teemo và đòn tấn công của anh ta có thể khiến kẻ thù của anh ta là Ashe bị nhiễm độc. Bây giờ, giả sử chúng ta đã đưa ra chuỗi thời gian tấn công tăng dần của Teemo đối với Ashe và khoảng thời gian trúng độc mỗi lần tấn công của Teemo, chúng ta phải tìm tổng thời gian mà Ashe ở trong tình trạng bị nhiễm độc. Chúng ta có thể cho rằng Teemo tấn công vào đầu một thời điểm cụ thể và khiến Ashe bị nhiễm độc ngay lập tức.

Đầu vào giống như [1,4] và 2, sau đó đầu ra sẽ là 4. Vì vậy, điều này là do tại thời điểm 1, Teemo bắt đầu tấn công Ashe và khiến Ashe bị trúng độc ngay lập tức. Tại đây trạng thái trúng độc này sẽ tồn tại trong 2 giây cho đến hết thời điểm 2. Và ở thời điểm 4, Teemo tấn công kẻ địch này một lần nữa, và khiến Ashe ở trong trạng thái trúng độc thêm 2 giây nữa. Vì vậy, cuối cùng bạn cần xuất ra 4.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Đặt ret:=0
  • currEnd:=-1
  • n:=kích thước của t
  • cho tôi trong phạm vi từ 0 đến n - 1
    • start:=t [i], end:=t [i] + d - 1
    • if currEnd
    • nếu không thì ret:=ret + end - currEnd, currEnd:=end
  • trả lời lại

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

#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));
}

Đầu vào

[1,4]
4

Đầu ra

4