Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ प्रोग्राम सभी राक्षसों को मारने के लिए बम रखने के लिए न्यूनतम स्थानों को खोजने के लिए

मान लीजिए कि हमारे पास दो सरणियाँ X और H हैं। दोनों N तत्वों के साथ हैं, अन्य दो संख्याएँ D और A भी हैं। एक कहानी में विचार करें, एक चांदी की लोमड़ी N राक्षसों से लड़ रही है। राक्षस एक पंक्ति में खड़े हैं, ith राक्षस का समन्वय X[i] है, और इसका स्वास्थ्य H[i] है। चांदी की लोमड़ी राक्षसों पर हमला करने के लिए बमों का इस्तेमाल कर सकती है। स्थान x पर बम गिराने से x - D से x + D की सीमा के भीतर सभी राक्षसों को नुकसान होगा। उनका स्वास्थ्य A से कम हो जाएगा। जब सभी राक्षसों के पास 0 स्वास्थ्य बचा है, तो लोमड़ी जीत जाती है। हमें जीतने के लिए आवश्यक न्यूनतम संभव खोजना होगा।

तो, अगर इनपुट डी =3 की तरह है; ए =2; एक्स =[1, 5, 9]; एच =[2, 4, 2], तो आउटपुट 2 होगा, क्योंकि निर्देशांक 4 पर पहला बम, नए स्वास्थ्य मान [0, 2, 2] हैं, फिर स्थिति 6 पर सभी स्वास्थ्य मूल्यों को [0, 0, 0].

कदम

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

Define a large array q
Define an array of x and h pairs
n := size of X
d := D
a := A
for initialize i := 1, when i <= n, update (increase i by 1), do:
   num[i].x := X[i - 1]
   num[i].h := H[i - 1]
sort the array num
sum := 0
for initialize i := 1, when i <= n, update (increase i by 1), do:
   q[i] := q[i] + q[i - 1]
   num[i].h := num[i].h - q[i] * a
   if num[i].h <= 0, then:
      Ignore following part, skip to the next iteration
   p := (if num[i].h mod a is same as 0, then num[i].h / a, otherwise num[i].h / a + 1)
   tmp := num[i].x + 2 * d
   sum := sum + p
   q[i] := q[i] + p
   l := i, r = n
   while l < r, do:
      mid := (l + r + 1) / 2
      if num[mid].x <= tmp, then:
         l := mid
      Otherwise
         r := mid - 1
      q[l + 1] - = p
return sum

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;

const int maxn = 2e5 + 20;
int n;
int d, a, q[maxn];
struct node{
   int x, h;
   bool operator<(const node& a) const{
      return x < a.x;
   }
} num[maxn];
int solve(int D, int A, vector<int> X, vector<int> H){
   n = X.size();
   d = D;
   a = A;
   for (int i = 1; i <= n; i++){
      num[i].x = X[i - 1];
      num[i].h = H[i - 1];
   }
   sort(num + 1, num + n + 1);
   int sum = 0;
   for (int i = 1; i <= n; i++){
      q[i] += q[i - 1];
      num[i].h -= q[i] * a;
      if (num[i].h <= 0)
         continue;
      int p = (num[i].h % a == 0 ? num[i].h / a : num[i].h / a + 1);
      int tmp = num[i].x + 2 * d;
      sum += p;
      q[i] += p;
      int l = i, r = n;
      while (l < r){
         int mid = (l + r + 1) >> 1;
         if (num[mid].x <= tmp)
            l = mid;
         else
            r = mid - 1;
      }
      q[l + 1] -= p;
   }
   return sum;
}
int main(){
   int D = 3;
   int A = 2;
   vector<int> X = { 1, 5, 9 };
   vector<int> H = { 2, 4, 2 };
   cout << solve(D, A, X, H) << endl;
}

इनपुट

3, 2, { 1, 5, 9 }, { 2, 4, 2 }

आउटपुट

2

  1. सी ++ में प्रतिद्वंद्वी को पकड़ने के लिए आवश्यक न्यूनतम चरणों को खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास [u, v] के रूप में पेड़ के किनारों की एक सूची है, यह इंगित करता है कि u और v के बीच एक अप्रत्यक्ष किनारा है। और हमारे पास दो मान x और y भी हैं। यदि हम नोड x पर हैं, और हमारा प्रतिद्वंद्वी नोड y पर है। पहले दौर में, हम आगे बढ़ते हैं, फिर अगले दौर में प्रतिद्वंद्वी चलता है और इसी

  1. C++ में शतरंज की बिसात में वर्गों की संख्या ज्ञात करने का कार्यक्रम

    इस समस्या में हमें एक बिसात का आकार दिया जाता है। हमारा काम C++ में शतरंज की बिसात में वर्गों की संख्या ज्ञात करने के लिए एक प्रोग्राम बनाना है। समस्या का विवरण - शतरंज की बिसात में वर्गों की संख्या ज्ञात करना। हमें उस वर्ग के सभी संयोजनों की गणना करनी होगी जो शतरंज की बिसात के अंदर हैं यानी हम भुज

  1. C++ में 75% बनाए रखने के लिए उपस्थित होने के लिए व्याख्यानों की न्यूनतम संख्या खोजने का कार्यक्रम

    इस समस्या में, हमें दो नंबर M और N दिए गए हैं जो वर्तमान डेटा तक आयोजित कक्षाओं की कुल संख्या और छात्रों द्वारा भाग लेने वाली कक्षाओं की संख्या को क्रमशः दर्शाते हैं। हमारा काम सी++ में 75% बनाए रखने के लिए व्याख्यानों की न्यूनतम संख्या खोजने के लिए एक कार्यक्रम बनाना है। समस्या का विवरण 75% प्रतिश